Comment puis-je modifier les données d'un message avant son enregistrement?

13

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 api du plugin , je vois que deux points d'ancrage qui semblent pouvoir ê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 utiliser des filtres de regex, mais c'est le type général de filtre / action que j'essaie d'ajouter.

Mettre à jour

Veuillez noter que je souhaite 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 )

    
posée cwd 09.12.2011 - 01:41

5 réponses

22

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;
}
    
réponse donnée Anh Tran 09.12.2011 - 15:31
4

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.

enlace

    
réponse donnée drzaus 11.12.2014 - 22:42
1

ajoutez le code suivant au thème actif.

Ici, je remplace par [shell] avant de sauvegarder.

add_filter( 'content_save_pre' , 'my_sanitize_content' , 10, 1);
function my_sanitize_content( $value ) {
          return str_replace("<shell>", "[shell]", $value );
}
    
réponse donnée Suyash Jain 30.05.2016 - 14:01
1

Vous pouvez également rechercher le hook pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}
    
réponse donnée user28231 17.04.2018 - 20:02
0

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' );
    
réponse donnée Joshua Abenazer 09.12.2011 - 04:50

Lire d'autres questions sur les étiquettes