quelle est la bonne façon d'accrochage lors de la mise à jour du post
-
-
vous avez unespace après `save_post`,est-ce unefaute defrappeici ou était-ce dans votre code d'origine?également,[activer le débogage] (http://codex.wordpress.org/Debugging_in_WordPress)pendant le développement.you have a space after `save_post`, is that a typo here, or was that in your original code? also, [enable debugging](http://codex.wordpress.org/Debugging_in_WordPress) while developing.
- 2
- 2014-02-14
- Milo
-
@Milo désoléfaute defrappe,maispas dans le code d'origine@Milo sorry typo, but not in original code
- 0
- 2014-02-14
- rusly
-
sitelest le cas,vous devriez voir votre sortie dans le coin supérieurgauche de l'écran lors de la création d'unnouveaumessage.l'enregistrement d'unepublicationexistante seproduit avant une redirection,vousne verrez donc rien àmoins d'avoir activé le débogage.if that's the case, then you should see your output in the top left corner of the screen when creating a new post. saving an existing post happens before a redirect, so you won't see anything unless you have debugging enabled.
- 0
- 2014-02-14
- Milo
-
2 réponses
- votes
-
- 2014-02-14
Lorsqu'unmessageestmis àjour,certains hooks sont déclenchés:
- <
'pre_post_update'
est une action déclenchéejuste avant lamise àjour de lapublication,l'argumentpasséest 2:$post_ID
et$ data
quiest untableau de toutes les autres colonnes debase de données de latable depublication - <
'transition_post_status'
est un hook déclenché lors de lamise àjour,et passe 3 arguments: $new_post_status,$ old_post_status
et$post
(objet). - Ensuite,il y a 2 autres crochets detransition déclenchés,maisils sontnommés demanière dynamique,cela signifie que l'actioneffective déclenchée dépend de l'ancienet dunouveau statut deposte.
"{$old_status}_to_{$new_status}"
et"{$new_status} _ {$post- >post_type}"
. Passez d'abord le seul objet depublication comme argument,le secondpasse l'ID depublicationet l'objet depublication. Trouvez la documentation ici . - <
'edit_post'
quitransmettent 2 arguments:$post_ID
et$post
(object) - <
'post_updated'
quipassent 3 arguments:$post_ID
,$post_after
(post object après lamise àjour ),$post_before
(objet depublication avant lamise àjour) - Un autre hook dynamique:
"save_post_{$post->post_type}"
qui dépend dutype depublication,parexemplepour les articles standardest'save_post_post'
et pour lespagesest'save_post_page'
,ce hookpasse 3 arguments:$post_ID
,$post
(objet)et$ update
quiest unbooléen (vrai oufaux) quiest vrai lorsque vouseffectuez unemise àjour,en fait,ce hookest déclenché également lorsqu'unmessageestenregistrépour lapremièrefois . - '
save_post
' quiest déclenché à lafois lors de lamise àjouret lors dupremierenregistrement,et transmet les 3mêmes arguments du hookprécédent. - '
save_post _ {$post_type}
' quiest déclenché à lafois lors de lamise àjouret lors dupremierenregistrement,et transmet les deuxpremiers arguments du hookprécédent. - Enfin,vous avez '
wp_insert_post
' ,quiest déclenché à lafois lors de lamise àjouret lors dupremierenregistrement,et passez les 3mêmes arguments des 2 hooksprécédents.
Ces hooks sont déclenchés à chaquefois qu’unepublicationestmise àjour,à lafois via lespages d’administration dubackendet via unemise àjour "manuelle"en utilisant
wp_update_post
ouwp_insert_post
fonctions.Lorsque lapublicationestmise àjour à l'aide despages d'administration,des hooks supplémentaires sont déclenchés,parexemple,
'update_post_redirect'
ou'post_updated_messages'
. (Voir ceci et ce WPSE répondpour desexemples d'utilisation).Notez que si vous voulez utiliser un argument de hooks,cen'estpas lepremier,vous devez le déclarerexplicitement dans l'appel
add_action
.Parexemple si vous souhaitez utiliser l'argument
'$ update'
(c'est-à-dire le 3ème) du hook'save_post'
,vous devez ajouter3
comme$ allowed_args
param suradd_action
( voir la documentation )://si vousn'ajoutezpas 3 comme 4ème argument,celane fonctionnerapas commeprévu add_action ('save_post','my_save_post_function',10,3); functionmy_save_post_function ($post_ID,$post,$ update) { $msg='Est-ce unemise àjour? '; $msg.=$mise àjour? 'Oui.' : 'Non.'; wp_die ($msg); }
Dernière remarque concernant timing : vous devez être sûr que
add_action
est appelé avant que l'actionne soit déclenchée,sinonellene fera rien./p>
Parexemple ce code:
wp_update_post ($post); add_action ('save_post','ma_fonction',10,3);
ne fera rien,car l'actionest ajoutée après le déclenchement du hook. Voici simple à reconnaître,dans lemonde réel,le codene l'estpastoujours.
When a post is updated there are some hooks that are fired:
'pre_post_update'
is an action fired just before the post is updated, the argument passed are 2:$post_ID
and$data
that is an array of all the other database colums of the post table'transition_post_status'
is an hook fired on update, and pass 3 arguments: $new_post_status,$old_post_status
and$post
(object).- Then, there are other 2 transition hooks fired, but they are dynamic named, it means that the effective action fired depends on the old and the new post status.
"{$old_status}_to_{$new_status}"
and"{$new_status}_{$post->post_type}"
. First pass the only the post object as argument, the second pass the post id and the post object. Find documentation here. 'edit_post'
that pass 2 arguments:$post_ID
and$post
(object)'post_updated'
that pass 3 arguments:$post_ID
,$post_after
(post object after the update),$post_before
(post object before the update)- Another dynamic hook:
"save_post_{$post->post_type}"
that depends on post type, e.g. for standard posts is'save_post_post'
and for pages is'save_post_page'
, this hook pass 3 arguments:$post_ID
,$post
(object) and$update
that is a boolean (true or false) that is true when you perform an update, in fact this hook is fired also when a post is saved for first time. - '
save_post
' that is fired both on update and on first saving, and pass the same 3 arguments of the previous hook. - '
save_post_{$post_type}
' that is fired both on update and on first saving, and pass the same first 2 arguments of the previous hook. - Finally you have '
wp_insert_post
', that is fired both on update and on first saving, and pass the same 3 arguments of the previous 2 hooks.
These hook are fired every time a post is updated, both via admin pages in backend and via when updated "manually" using
wp_update_post
orwp_insert_post
functions.When the post is updated using admin pages there are additional hooks fired, an example is
'update_post_redirect'
or'post_updated_messages'
. (See this and this WPSE answers for usage examples).Note that if you want make use of some hooks argument, that isn't the first, one you have to explicitly declare it in
add_action
call.E.g. if you want to use the
'$update'
argument (that is the 3rd) of the'save_post'
hook you need to add3
as$accepted_args
param onadd_action
(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 ); }
Last note regard timing: you must be sure that
add_action
is called before the action is triggered, or it will do nothing.E.g. this code:
wp_update_post( $post ); add_action( 'save_post', 'my_function', 10, 3 );
will do nothing, because the action is added after the hook is fired. Here is simple to recognize it, in real world code isn't always so.
-
Jepense que le crochet d'action 'save_post'est également déclenché lorsque vous appuyez sur Ajouternouveau (publication,page,CPT) dans letableau debord.Pour vous voir,exécutez simplement ce code.`function save_post_test ($post_id,$post,$ update) { print 'post_id:'; var_export ($post_id); imprimer 'post:'; var_export ($post); print 'mise àjour:'; var_export ($ update); wp_die ('save_post hook s'exécute lorsque vous cliquez sur Ajouternouveau ..'); } add_action ('save_post','save_post_test',10,3); ` Pourquoi l'action "save_post" s'exécute-t-elle sur Ajouter unnouveau au lieu de Publier?Pourfaire lepost de rédaction automatique,je suppose.I think that the 'save_post' action hook is also fired when hitting Add New (Post, Page, CPT) in the dashboard. To see yourself just run this code. `function save_post_test( $post_id, $post, $update ) { print ' post_id : '; var_export( $post_id ); print ' post : '; var_export( $post ); print ' update : '; var_export( $update ); wp_die( 'save_post hook runs when you click Add New..' ); } add_action( 'save_post', 'save_post_test', 10, 3 );` Why does the 'save_post' action run on Add New instead of on Publish? To make the auto-draft post I suppose.
- 0
- 2018-11-12
- lowtechsun
-
@lowtechsun Commeilest dit dans le A,les hooks sont déclenchés à chaquefois qu'unepublicationestmise àjour,c'est-à-direenregistrée dans DB.Lorsque vous cliquez sur "Ajouternouveau",près du chargement de lapage,WP crée unbrouillon depublication stocké dans DB afin que les hooks soient déclenchés.@lowtechsun Like it is said in the A, the hooks are fired every time a post is updated, i.e. saved in DB. When you hit "Add New", close to page loading, WP creates a draft post stored in DB so he hooks are fired.
- 0
- 2018-11-13
- gmazzap
-
Merci de revenir versmoi.Je viens de le découvrir hieret j'aipensé que le concept était déroutant.Cela signifie quej'ouvre d'abord lapagepour ajouter unnouveaumessage.À ce stade,je pensaisn'avoir _pas_ déjà créé demessage.Seulement _une_j'aifrappé Publier,je pense que lenouveaumessageest créé.En allantplus loin,j'espère que WP supprime lepost debrouillon automatique _si_je clique sur Ajouter unnouveaumais quitte lapage sans appuyer sur Publier?Thank you for getting back to me. Just found out about this yesterday and thought the concept of this is confusing. Meaning first I open the page to add a new post. At this stage I thought I have _not_ already created a post. Only _once_ I hit Publish I would think the new post is created. Taking this further I hope WP does delete the auto-draft post _if_ I hit Add New but then leave the page without hitting Publish?
- 0
- 2018-11-13
- lowtechsun
-
- 2014-02-14
Pourquoine pas accrocher
post_updated_messages
.De cettefaçon,vouspouvez afficher cemessage comme lemessage WordPresspar défautmis àjour.add_filter('post_updated_messages', 'your_message'); function your_message(){ }
Cherchez unexempleici:
http://codex.wordpress.org/Function_Reference/register_post_type
sous
post_updated_messages
Why not hook in
post_updated_messages
. That way you can show this message just like the default wordpress post updated.add_filter('post_updated_messages', 'your_message'); function your_message(){ }
Look for an example here:
http://codex.wordpress.org/Function_Reference/register_post_type
under
post_updated_messages
J'essaye de raccrocher lorsque lapublicationestmise àjourmaistous les hook quej'essayejamaisexécutés sauf
updated_post_meta
J'aiessayé cette
add_action('save_post', 'my_function');
mais aucunidentifiantn'a été renvoyé,oupeut-être que cemessageest déjàen échomaisne s'affichejamais car l'en-tête de redirectionestenvoyé.