web-dev-qa-db-fra.com

quelle est la bonne façon de raccrocher quand post update

j'essaie de raccrocher lorsque la publication est mise à jour, mais tous les raccrochés, je n'ai jamais exécuté, à l'exception de 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é cette add_action('save_post', 'my_function'); mais aucun identifiant n'a été envoyé en écho, ou peut-être que ce message est déjà en écho mais ne s'affiche jamais car l'en-tête de redirection est envoyé.

15
rusly

Lorsqu'une publication est mise à jour, certains hooks sont activés:

  • 'pre_post_update'est une action lancée juste avant la publication est mise à jour, les arguments passés sont 2: $post_ID et $data qui est un tableau de all les autres colonnes de la base de données de la table de poste
  • 'transition_post_status'est un hook déclenché lors de la mise à jour et passe 3 arguments: $ new_post_status, $old_post_status et $post (objet).
  • Ensuite, deux autres crochets de transition ont été activés, mais leur nom est 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. Trouver la documentation ici .
  • 'edit_post'qui passe 2 arguments: $post_ID et $post (objet)
  • 'post_updated'qui passe 3 arguments: $post_ID, $post_after (objet postérieur à la mise à jour), $post_before (objet posté avant la mise à jour)
  • Un autre hook dynamique:"save_post_{$post->post_type}"qui dépend du type de publication, par exemple. pour les publications standard, 'save_post_post' et pour pages, 'save_post_page', ce hook utilise 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. En fait, ce hook 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 hooks sont activés chaque fois qu'une publication est mise à jour, à la fois via les pages d'administration dans le backend et via lorsqu'elle est mise à jour "manuellement" à l'aide de wp_update_post ou wp_insert_post functions.

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

Notez que si vous voulez utiliser un argument de type hook, ce n'est pas le premier, vous devez le déclarer explicitement dans l'appel add_action.

Par exemple. si vous voulez utiliser l'argument '$update' (c'est-à-dire le troisième) du crochet 'save_post', vous devez ajouter 3 en tant que $accepted_args param sur add_action ( voir 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 timing: vous devez être sûr que add_action est appelé avant l'action est déclenchée sinon elle ne fera rien.

Par exemple. 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 déclenchement du hook. Ici, il est simple de le reconnaître, le code du monde réel ne l’est pas toujours.

47
gmazzap

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

add_filter('post_updated_messages', 'your_message');

function your_message(){
}

Cherchez un exemple ici:

http://codex.wordpress.org/Function_Reference/register_post_type

sous post_updated_messages

2
Jacob Rambo