save_post + insert_post = Endlosschleife

Ich versuche, automatisch einen neuen Beitrag zu erstellen, wenn ein Beitrag, der ein bestimmtes benutzerdefiniertes Feld enthält, gespeichert wird – indem ich eine insert_post-function in save_post einhänge.

Dies erzeugt eine Endlosschleife.

Ich habe einige Antworten auf dieses Problem gefunden und vorgeschlagen, den Post-Typ vor dem Einfügen zu überprüfen.

Der folgende Code gibt jedoch immer noch eine Endlosschleife, irgendwelche Ideen?

add_action('save_post', 'createGallery'); function createGallery () { global $post; if ( $post->post_type == 'activity' ) { $gallerypost = array( 'post_content' => 'the text of the post', 'post_status' => 'publish', 'post_title' => 'Photo album', 'post_type' => 'post', 'post_author' => 1); wp_insert_post( $gallerypost ); } } 

Solutions Collecting From Web of "save_post + insert_post = Endlosschleife"

Dies ist, weil beim ersten Durchlauf der Schleife $post der aktuelle Post ist. Aber das zweite Mal, wenn Sie die Schleife durchlaufen, hat sich $ post nicht geändert. Das gleiche passiert der 3., 4., 5., etc

Da die $ post-Variable der aktuelle Post dieser Seite ist, nicht der Post, den Sie gerade gespeichert haben, ist die if-statement loops immer true und eine Endlosschleife ist damit verbunden. Anstatt die Variable $post überprüfen, sollten Sie die ID des Posts überprüfen, der gespeichert wird. Wenn wir uns den Aufruf ansehen, der die Aktion save_post ausführt:

 do_action('save_post', $post_ID, $post); 

Wir sehen jetzt, dass save_post Parameter hat !! Wenn wir also beim Hinzufügen angeben, dass die function 1 Parameter akzeptiert:

 add_action('save_post', 'createGallery',1,1); 

Fügen Sie dann den Post-ID-Parameter hinzu und verwenden Sie stattdessen Folgendes:

 function createGallery ($post_ID) { if ( get_post_type($post_ID) == 'activity' ) { $gallerypost = array( 'post_content' => 'the text of the post', 'post_status' => 'publish', 'post_title' => 'Photo album', 'post_type' => 'post', 'post_author' => 1); wp_insert_post( $gallerypost ); } } 

Dann sollte deine Endlosschleife weg sein! Wenn dies nicht der Fall ist, haben Sie einen erheblichen Schritt in Richtung genauerer Code gemacht, da Sie jetzt an den richtigen Daten arbeiten.

Ich würde davor warnen, dass die Änderung von 'post_type' => 'post', zu 'post_type' => 'activity', die Endlosschleife wieder einführt.