web-dev-qa-db-fra.com

save_post vs post_updated

Je suis nouveau sur WordPress et php. J'aimerais écrire une fonction qui se déclenche lorsqu'un contenu spécifique est mis à jour.

Je suis tombé sur 2 actions, save_post et post_updated. Je ne sais pas trop quand utiliser l'un par rapport à l'autre. Je pense que celui dont j'ai besoin est post_updated, mais je ne suis pas sûr. Je ne sais pas vraiment comment vérifier si un message spécifique est mis à jour. Je n'ai pas encore beaucoup commencé là-dessus (pour mon travail non-codant), mais voici ce que j'ai pensé jusqu'à présent, après avoir examiné d'autres suggestions:

add_action('post_updated', 'test_function');

function test_function($post_ID, $post_after, $post_before){

    //check if a specific post is updated here 

    $post_content = $post_after->post_content;

    $raw_data=array(
        'updated_post_content'=>$post_content,
    );

    //do something
}
2
user2247061

OK, commençons par le Codex:

save_post

est une action déclenchée chaque fois qu'une publication ou une page est créée ou mise à jour, qu'il s'agisse d'une importation, d'un formulaire de modification de publication/publication, xmlrpc ou d'une publication par courrier électronique. Les données de la publication sont stockées dans $ _POST, $ _GET ou dans le $ post_data global, selon le mode de modification de la publication. Par exemple, les modifications rapides utilisent $ _POST.

Étant donné que cette action est déclenchée juste après l'enregistrement de la publication, vous pouvez facilement accéder à cet objet de publication à l'aide de get_post ($ post_id).

Il faut 3 paramètres:

  • $ post_ID
  • WP_Post $ post (objet post)
  • bool $ update (qu'il s'agisse d'une publication existante mise à jour ou non.)

post_updated

Utilisez ce crochet chaque fois que vous avez besoin de comparer les valeurs avant et après la mise à jour.

Ce hook passe jusqu'à 3 arguments, comme suit:

  • $ post_ID;
  • $ post_after (objet post après la mise à jour);
  • $ post_before (objet post avant la mise à jour);

Alors, quand devriez-vous utiliser lequel?

post_updated est activé uniquement si la publication donnée existait avant et est actuellement mise à jour. Il ne sera pas appelé lorsqu'un nouveau message est inséré. C'est très utile, si vous voulez faire quelque chose avec la version précédente de post donné.

save_post est activé à chaque fois qu'un message est enregistré. Vous n'avez pas un accès facile à la version précédente de l'article donné ici (vous devrez utiliser des révisions, si elles sont disponibles).

Et encore un peu de confusion;)

Il y a aussi une action supplémentaire, vous pouvez utiliser:

  • save_post_{$post->post_type} avec les mêmes paramètres que save_post, il est déclenché juste avant save_post et vous pouvez l'utiliser si vous souhaitez exécuter votre code uniquement pour un type de publication donné.
1
Krzysiek Dróżdż