wp_insert_post () innerhalb von save_post (): Erzwinge WP, globales Post-Objekt nicht zu aktualisieren?

Ich schrieb ein benutzerdefiniertes Plugin, das eine weitere Metabox in die Edit-Post-Bildschirme einfügt. Sobald der Benutzer einen Artikel speichert oder veröffentlicht, möchte ich einen anderen Beitrag mit einem benutzerdefinierten post_type erstellen, der großartig funktioniert. Daten aus anderen Metaboxen werden jedoch mit der Post-ID meines neu erstellten benutzerdefinierten Posts anstelle des ursprünglichen Posts gespeichert. Ich vermute, das liegt daran, dass wp_insert_post () das globale $ post-Objekt mit der post_id-function, die gerade erzeugt wurde, aktualisiert.

Aber wie kann ich sicherstellen, dass dies nicht passiert? Wie stellen Sie sicher, dass zB alle anderen Plugins, die auch den save_post-Hook verwenden, ihre Daten korrekt in den richtigen Post speichern anstatt in meinen benutzerdefinierten Type-Post, der von wp_insert_post () erstellt wurde?

add_action('save_post', array(&$this, 'save_post'), 1, 1); public function save_post($post_id) { // verify if this is an auto save routine. // If it is our form has not been submitted, so we dont want to do anything if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ return; } if($_POST['post_type'] == self::POST_TYPE && current_user_can('edit_post', $post_id)) { $newContestAdded = false; $_STBKT_assignedContestHopper = get_post_meta($post_id, '_STBKT_assignedContestHopper', true); if (($_STBKT_assignedContestHopper=='' || $_POST['STBKT_quickcontest_contestID']=='') && get_post_type($post_id) == 'post') { // Create contesthopper post object $CH_post = array( 'post_title' => '', 'post_content' => '', 'post_status' => 'publish', 'post_author' => 1, 'post_type' => 'contesthopper' ); $_STBKT_assignedContestHopper = wp_insert_post( $CH_post, $wp_error ); } } } 

Solutions Collecting From Web of "wp_insert_post () innerhalb von save_post (): Erzwinge WP, globales Post-Objekt nicht zu aktualisieren?"

Ich habe keine Zeit, dies gründlich zu testen (und Ihr Code ist sowieso nicht von der kompletten class), also verstehen Sie, dass diese Antwort sehr save_post , aber save_post wird wieder ausgeführt, wenn Sie wp_insert_post . Ich denke, es könnte der zweite Lauf sein, der das Problem verursacht. Wenn dies der Fall ist, sollten Sie das Problem vermeiden können, indem Sie Ihren Callback vom save _post Hook entfernen save _post .

 add_action('save_post', array(&$this, 'save_post'), 1, 1); public function save_post($post_id) { remove_action('save_post', array(&$this, 'save_post'), 1, 1);