Was ist der richtige Weg, um beim Update Post zu haken
-
-
Sie habenein Leerzeichennach "save_post". Ist das hierein Tippfehler oder war dasin Ihrem ursprünglichen Code?Außerdem [Debugging aktivieren] (http://codex.wordpress.org/Debugging_in_WordPress) während der Entwicklung.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 sorry Tippfehler,abernichtim Originalcode@Milo sorry typo, but not in original code
- 0
- 2014-02-14
- rusly
-
Wenn dies der Fallist,sollten Sie Ihre Ausgabein der oberen linken Ecke des Bildschirms sehen,wenn Sieeinen neuen Beitragerstellen.Das Speicherneines vorhandenen Beitragserfolgt voreiner Umleitung,sodass Sienichts sehen,es sei denn,Sie haben das Debuggen aktiviert.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 Antworten
- Stimmen
-
- 2014-02-14
Wennein Beitrag aktualisiert wird,werdeneinige Hooks ausgelöst:
-
'pre_post_update'
isteine Aktion,dienur vor der Aktualisierung des Posts ausgelöst wird. Das übergebene Argument lautet 2:$post_ID
und$ data code>,dhein Array von allen anderen Datenbankspalten der Post-Tabelle
-
"transition_post_status"
istein Hook,derbeim Update ausgelöst wird und 3 Argumente übergibt: $new_post_status,$ old_post_status
und$post
(Objekt). - Dann werden zwei weitere Übergangshaken ausgelöst,diejedocheinen dynamischen Namen haben. Diesbedeutet,dass dieeffektive Aktion vom alten und vomneuen Post-Status abhängt.
"{$old_status}_to_{$new_status}"
und"{$new_status} _ {$post- >post_type}"
. Übergeben Sie zuerst daseinzige Post-Objekt als Argument,das zweite die Post-ID und das Post-Objekt. Die Dokumentation finden Sie hier . -
'edit_post'
,die zwei Argumente übergeben:$post_ID
und$post
(Objekt) -
'post_updated'
,die 3 Argumente übergeben:$post_ID
,$post_after
(Objektnach dem Updateposten ),$post_before
(Objekt vor dem Updateposten) - Ein weiterer dynamischer Hook:
"save_post_{$post->post_type}"
,der vom Post-Typ abhängt,z. Für Standardpostsist'save_post_post'
undfür Seiten'save_post_page'
besteht dieser Hook 3 Argumente:$post_ID
,$post
(Objekt) und$ update
,dasistein Boolescher Wert (wahr oderfalsch),der wahrist,wenn Sieein Update durchführen. Tatsächlich wird dieser Hook auch ausgelöst,wennein Beitrag zumersten Malgespeichert wird . - '
save_post
' ,der sowohlbeim Update als auchbeim ersten Speichern ausgelöst wird,und übergeben Sie diegleichen 3 Argumente des vorherigen Hooks. - '
save_post _ {$post_type}
' ,das sowohlbeim Update als auchbeim ersten Speichern ausgelöst wird,und übergeben Sie diegleichenerstenbeiden Argumente des vorherigen Hooks. - Schließlich haben Sie '
wp_insert_post
' ,das sowohlbeim Update als auchbeim ersten Speichern ausgelöst wird,und übergeben dieselben 3 Argumente der vorherigen 2 Hooks.
Diese Hooks werdenjedes Mal ausgelöst,wennein Beitrag aktualisiert wird,sowohl über Administrationsseitenim Backend als auch über die "manuelle" Aktualisierungmithilfe von
wp_update_post
oderwp_insert_post
Funktionen.Wenn der Beitragmithilfe von Administrationsseiten aktualisiert wird,werden zusätzliche Hooks ausgelöst. Ein Beispielist
'update_post_redirect'
oder'post_updated_messages'
. (Siehe dies und diese WPSE-Antwortenfür Verwendungsbeispiele).Beachten Sie,dass Sie,wenn Sieein Hooks-Argument verwendenmöchten,dasnicht dasersteist,diesesexplizitim Aufruf
add_action
deklarierenmüssen.z. Wenn Sie das Argument
'$ update'
(dasist das dritte) des Hooks'save_post'
verwendenmöchten,müssen Sie3
als hinzufügen$ accept_args
param onadd_action
( siehe Dokumente )://Wenn Sienicht 3 als 4. Argument hinzufügen,funktioniert diesnicht wieerwartet add_action ('save_post','my_save_post_function',10,3); Funktionmy_save_post_function ($post_ID,$post,$ update) { $msg='Ist dasein Update? '; $msg.=$ update? 'Ja.' : 'Nein.'; wp_die ($msg); }}
Letzte Anmerkung zu Timing : Siemüssen sicher sein,dass
add_action
aufgerufen wird,bevor die Aktion ausgelöst wird. Andernfalls wirdnichts unternommen.z. dieser Code:
wp_update_post ($post); add_action ('save_post','my_function',10,3);
wirdnichtstun,da die Aktion hinzugefügt wird,nachdem der Hook ausgelöst wurde. Hieristeseinfach zuerkennen,in der realen Weltist Codenichtimmer so.
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.
-
Ich denke,dass der Aktions-Hook 'save_post' auch ausgelöst wird,wenn Sieim Dashboard auf Add New (Post,Page,CPT) klicken.Um sich selbst zu sehen,führen Sieeinfach diesen Code aus.`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 ('Der Hook "save_post" wird ausgeführt,wenn Sie auf "Neu hinzufügen" klicken.'); }} add_action ('save_post','save_post_test',10,3); ` Warum wird die Aktion 'save_post'beim Hinzufügen von Neu stattbeim Veröffentlichen ausgeführt?Um den Auto-Draft-Beitrag zuerstellen,nehmeich an.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 Wiein Agesagt,werden die Hooksjedes Mal ausgelöst,wennein Beitrag aktualisiert,d. h.in der Datenbankgespeichert wird.Wenn Sie kurz vor dem Laden der Seite auf "Neu hinzufügen" klicken,erstellt WPeinen Entwurfspost,derin der Datenbankgespeichertist,damit die Hooks ausgelöst werden.@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
-
Danke,dass du aufmich zurückkommst.Habegestern davonerfahren undfand das Konzept verwirrend.Das heißt,zuerst öffneich die Seite,umeinen neuen Beitrag hinzuzufügen.Zu diesem Zeitpunkt dachteich,ich hättenoch keinen Beitragerstellt.Nureinmal,wennich auf Veröffentlichengeklickt habe,würdeich denken,dass derneue Beitragerstellt wird.Ich hoffe,dass WP den automatischerstellten Beitrag löscht,wennich auf "Neu hinzufügen" klicke,aber dann die Seite verlasse,ohne auf "Veröffentlichen" zu klicken.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
Warumnicht
post_updated_messages
einbinden?Auf diese Weise können Sie diese Nachrichtgenau wie den aktualisierten Standard-WordPress-Beitrag anzeigen.add_filter('post_updated_messages', 'your_message'); function your_message(){ }
Suchen Sie hiernacheinem Beispiel:
http://codex.wordpress.org/Function_Reference/register_post_type
unter
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
Ich versuche zu haken,wenn der Beitrag aktualisiert wird,aber alle Haken,dieich versuche,werdennie ausgeführt,außer
updated_post_meta
Ich habe versucht,diese
add_action('save_post', 'my_function');
,aberes wurde keine ID ausgegeben,oder diese Nachricht wirdbereits wiedergegeben,aber aufgrund des Umleitungsheadersnie gerendert.