web-dev-qa-db-fra.com

Comment puis-je modifier les données de publication avant qu'elles ne soient enregistrées?

J'ai un plugin et j'aimerais pouvoir utiliser le contenu de la publication à travers certains filtres avant de l'enregistrer dans la base de données. En regardant le plugin api , je vois que deux crochets qui ressemblent pourraient être utiles:

save_post
wp_insert_post

Le seul problème est qu'il semble que save_post n'a pas besoin de renvoyer une variable. Je ne sais donc pas comment filtrer le contenu, et wp_insert_post semble documenté.

J'aimerais faire quelque chose comme ça:

add_action('whatever_hook_name','my_function');

function my_function($post_content){
    return $post_content.' <br> This post was saved on '.time();
}

Je vais faire quelque chose de plus utile que d’ajouter un horodatage, à savoir l’exécution de filtres de regex, mais c’est le type général de filtre/action que j’essaie d’ajouter.

Mise à jour

Veuillez noter que je veux intercepter les données sur le moyen de les enregistrer dans la base de données - pas quand elles sont affichées dans la publication (par exemple: Pas en ajoutant un filtre à the_content)

17
cwd

Le filtre wp_insert_post_data peut le faire:

add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );

function filter_post_data( $data , $postarr ) {
    // Change post title
    $data['post_title'] .= '_suffix';
    return $data;
}
25
Anh Tran

Utilisez le filtre content_save_pre exactement comme the_content - la différence est qu'il fonctionne lorsqu'une publication est enregistrée plutôt que affichée.

http://codex.wordpress.org/Plugin_API/Filter_Reference/content_save_pre

6
drzaus

Vous pouvez également vérifier le hook pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}
2
user28231

Ajoutez le code suivant au thème actif pour remplacer <Shell> par [Shell] avant de l'enregistrer:

 add_filter('content_save_pre', 'my_sanitize_content', 10, 1);
 function my_sanitize_content($value) {
   return str_replace('<Shell>', '[Shell]', $value);
 }
1
Suyash Jain

Si vous souhaitez simplement ajouter quelque chose de similaire à la fin de tous les articles, je vous suggère d'utiliser le filtre the_content.

function append_to_content( $content ) {
    global $post;
    return $content.'<br />This post was saved on '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );
0
Joshua Abenazer