quel est le bon moyen de raccrocher après la mise à jour

14

J'essaie de raccrocher lorsque la publication est mise à jour, mais tous les raccrochés sont exécutés sauf updated_post_meta

add_action('updated_post_meta', 'my_function');

function my_function($post_id) {    
    echo 'This is my post ID : '.$post_id;
}

J'ai essayé ce add_action('save_post', 'my_function'); , mais aucun identifiant n'a été renvoyé, ou peut-être ce message est-il déjà renvoyé mais ne s'affiche jamais car l'en-tête de redirection est envoyé.

    
posée rusly 14.02.2014 - 17:23

2 réponses

40

Lors de la mise à jour d'un message, certains points de raccordement sont activés:

  • 'pre_post_update' est une action déclenchée juste avant que la publication soit mise à jour, les arguments passés sont 2: $post_ID et $data qui est un tableau de tout les autres colonnes de la base de données de la table de publication
  • 'transition_post_status' est un crochet activé lors de la mise à jour et transmet 3 arguments: $ new_post_status, $old_post_status et $post (objet).
  • Ensuite, il y a 2 autres crochets de transition activés, mais ils sont nommés de manière dynamique, cela signifie que l'action effective déclenchée dépend de l'ancien et du nouveau statut de publication. "{$old_status}_to_{$new_status}" et "{$new_status}_{$post->post_type}" . Tout d'abord, transmettez comme argument l'argument objet post, le second, l'identifiant post et l'objet post. Trouvez la documentation ici .
  • 'edit_post' ayant passé 2 arguments: $post_ID et $post (objet)
  • 'post_updated' ayant passé 3 arguments: $post_ID , $post_after (objet postérieur à la mise à jour), $post_before (objet posté avant la mise à jour)
  • Autre point d'ancrage dynamique: "save_post_{$post->post_type}" , qui dépend du type de publication, par exemple. pour les publications standard, 'save_post_post' et pour les pages, 'save_post_page' , ce hook passe 3 arguments: $post_ID , $post (objet) et $update qui est un booléen (vrai ou faux) qui est vrai lorsque vous effectuez une mise à jour, ce crochet est également activé lorsqu’un message est enregistré pour la première fois.
  • ' save_post ' qui est déclenché à la fois lors de la mise à jour et lors de la première sauvegarde, et transmet les 3 mêmes arguments du hook précédent.
  • ' save_post_{$post_type} ' qui est déclenché à la fois lors de la mise à jour et lors de la première sauvegarde, et transmet les mêmes 2 premiers arguments du hook précédent.
  • Enfin, vous avez ' wp_insert_post ' , qui est déclenché à la fois lors de la mise à jour et lors de la première sauvegarde, et transmettez les 3 mêmes arguments des 2 derniers points d'ancrage.

Ces liens sont activés chaque fois qu'une publication est mise à jour, à la fois via les pages d'administration dans le backend et via "manuellement" à l'aide de % co_de Fonctions% ou wp_update_post .

Lorsque la publication est mise à jour à l'aide de pages d'administration, des points d'ancrage supplémentaires ont été activés, par exemple, wp_insert_post ou 'update_post_redirect' . (Voir this et this WPSE répond aux exemples d'utilisation).

Notez que si vous souhaitez utiliser un argument de type hook, ce n'est pas le premier, vous devez le déclarer explicitement dans 'post_updated_messages' call.

E.g. si vous souhaitez utiliser l'argument add_action (c'est-à-dire le troisième) du crochet '$update' , vous devez ajouter 'save_post' en tant que 3 param sur $accepted_args (see docs ):

// if you don't add 3 as as 4th argument, this will not work as expected
add_action( 'save_post', 'my_save_post_function', 10, 3 );

function my_save_post_function( $post_ID, $post, $update ) {
  $msg = 'Is this un update? ';
  $msg .= $update ? 'Yes.' : 'No.';
  wp_die( $msg );
}

La dernière note concerne le minutage : vous devez être sûr que add_action s'appelle avant que l'action soit déclenchée, sinon elle ne fera rien.

E.g. ce code:

wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );

ne fera rien, car l'action est ajoutée après le raccordement du hook. C'est simple à reconnaître, dans le monde réel, le code ne l'est pas toujours.

    
réponse donnée gmazzap 14.02.2014 - 18:08
1

Pourquoi ne pas accrocher à post_updated_messages . De cette façon, vous pouvez afficher ce message exactement comme le message Wordpress mis à jour par défaut.

add_filter('post_updated_messages', 'your_message');

function your_message(){
}

Cherchez un exemple ici:

enlace

sous post_updated_messages

    
réponse donnée Jacob Rambo 14.02.2014 - 17:39

Lire d'autres questions sur les étiquettes