Probleme wp_insert_post und save_posts filter

Ich habe ein Problem mit der Verwendung von wp_insert_post. Ich füge die Fähigkeit für einen Beitrag von einem Typ hinzu, um einen Beitrag eines anderen Typs mit dem ersten Beitrag als dem Post-Elternteil zu erstellen. Ich habe ein paar Dinge mit dem save_posts-Filter getestet. Ich habe eine function erstellt, die einfach einen Post erstellt und dann diese function an den save_posts-Filter angehängt hat. Das Problem, das ich habe, ist, dass es Beiträge exponentiell zu meiner mySQL-Tabelle hinzufügt. Je länger ich es laufen lasse, bevor ich den Server einfriere, desto mehr Beiträge werden hinzugefügt. Gibt es einen besseren Weg, dies zu tun?

Beispielcode:

public function save() { $my_child = array( 'post_title' => $this->_child_type, 'post_content' => "test content", 'post_status' => 'publish', 'post_type' => "video", 'post_parent'=> 55 ); $nindex = wp_insert_post($my_child); } add_action('save_post', array(&$this, 'save')); 

Solutions Collecting From Web of "Probleme wp_insert_post und save_posts filter"

Sie können überprüfen, welcher Post-Typ die ‘save_post’ Aktion versucht:

 public function save() { global $post; if (!$post->post_type = 'video'){ $my_child = array( 'post_title' => $this->_child_type, 'post_content' => "test content", 'post_status' => 'publish', 'post_type' => "video", 'post_parent'=> 55 ); $nindex = wp_insert_post($my_child); } } add_action('save_post', array(&$this, 'save')); 

Es könnte aufgrund von Revisionen sein – wenn Sie Revisionen aktiviert haben, dann schlägt dieser Beitrag vor, dass das Speichern zweimal absichtlich geschieht – einmal für die Revision und einmal für den eigentlichen Post. Antwort in diesem Beitrag (Überprüfung auf Typ = ‘Revision’) scheint wie die beste Lösung.

Danke an @BAInternet für seine Lösung. Das Problem ist, dass, weil ich einen Post erstelle, die Speicherfunktion zweimal aufgerufen wird, so dass die Anzahl der Posts exponentiell ansteigt. Die Lösung, die ich gefunden habe, ist:

 public function save() { global $post; global $flag; //Following code makes sure it doesn't get executed twice if($flag ==0) $flag =1; else return; //Next to temporarily disable this filter remove_action('save_post', array(&$this, __FUNCTION__)); $my_child = array( 'post_title' => $this->_child_type, 'post_content' => "test content", 'post_status' => 'publish', 'post_type' => "video", 'post_parent'=> 55 ); $nindex = wp_insert_post($my_child); } //restore save add_action('save_post', array(&$this, __FUNCTION__)); } add_action('save_post', array(&$this, 'save'));