Der benutzerdefinierte wp_editor aktualisiert post_content nicht

Ich arbeite auf einer Kundenseite und erstelle ein Mitarbeiterprofil-Plugin. Das Problem ist, dass sie die Profile zuvor als reguläre Posts erstellt haben. Ich habe alle Mitarbeiterposten in benutzerdefinierte Beitragstypen umgewandelt.

Um den Post-Admin anzupassen, folgte ich Dipesh Kc’s Lösung , um den Standard-Editor anzupassen. Ich wollte den vorhandenen Inhalt für die Mitarbeiterbeiträge verwenden, aber den Editor anpassen, den Medien-Uploader und andere Optionen entfernen.

UPDATE: Während ich erfolgreich die Standard-Editor-Einstellungen ändern konnte, wird der Post-Inhalt im Editor angezeigt. Ich wp_update_post in den save_post Hook und dachte, dass das, was ich gerade bearbeite, der post_content in einer neuen benutzerdefinierten Metabox ist. Wenn ich den Beitrag aktualisiere, erhalte ich im Grunde einen fatalen Fehler, die Warnung “Speicher erschöpft”. Wenn ich jedoch die database überprüfe, wird der post_content mit meinen Änderungen aktualisiert.

Die relevanten Abschnitte meines Plugin-Codes sind unten basierend auf Gicoleks core und auch auf der WP-Codex-Seite für wp_update_post :

 public function __construct() { add_action( 'add_meta_boxes', array($this, 'meta_boxes' )); add_action( 'save_post', array($this, 'save_bio_data' ), 10, 1); } // Modify default content editor /** * Adds a box to the main column on the Post edit screen uses modified editor * * @hook add_meta_boxes * @see http://codex.wordpress.org/Function_Reference/add_meta_box */ public function meta_boxes() { global $_wp_post_type_features; //check for the required post type page or post or  false, 'textarea_name'=>'tn_cstm_bio', 'tabindex' => '4', 'teeny' => true ); wp_editor($post->post_content,'tn_cstm_bio', $settings); } /** * When the post is saved, save our customized post data * * @hook save_post */ public function save_bio_data($post_id) { // check if we're on the cpt page and if the nonce has been set if ( !isset( $_POST['post_type'] ) or !isset( $_POST['tn_cstm_noncename'] ) ) { return; } // check if the we're on the custom post page if ( !in_array( $_POST['post_type'], array( 'tn_cstm_people' ) ) ) { return; } // if we're doing an auto save return if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // verify nonce for the safety reasones // @see http://codex.wordpress.org/WordPress_Nonces if ( !wp_verify_nonce( $_POST['tn_cstm_noncename'], plugin_basename( __FILE__ ) ) ) return; /* Make sure that current user has proper rights to save the post *@see Caution! in http://codex.wordpress.org/Function_Reference/wp_update_post *Otherwise would generate multiple (hundreds of copies of the post) */ if ( !current_user_can( 'edit_post', $post_id ) ) return; /* Verify that post type is not set to revision and that $post object needs to be updated *http://codex.wordpress.org/Function_Reference/wp_update_post */ if ( ! wp_is_post_revision( $post_id ) ) { // unhook this function so it doesn't loop infinitely remove_action('save_post', 'save_bio_data'); // update the post, which calls save_post again $data_content = $_POST['tn_cstm_bio']; $my_post = array(); $my_post['ID'] = $post_id; $my_post['post_content'] = $data_content; wp_update_post( $my_post ); // re-hook this function add_action('save_post', 'save_bio_data'); } } 

Weiß jemand, warum der post_content nicht aktualisiert wird? Irgendwelche Einsichten würden geschätzt werden.

Solutions Collecting From Web of "Der benutzerdefinierte wp_editor aktualisiert post_content nicht"

Nach einigen Suchen und Abarbeiten einiger Pointer von Toscho und einigen anderen hilfreichen Beiträgen, um eine Endlosschleife zu vermeiden, gelang es mir, eine Lösung zu finden. Ich poste den Code unten und erkläre dann kurz:

 // Hook into the actions here public function __construct() { add_action( 'add_meta_boxes', array($this, 'meta_boxes' )); add_action( 'save_post', array($this, 'save_bio_data' ), 10, 1); } // Modify default content editor /** * Adds a box to the main column on the Post edit screen uses modified editor * * @hook add_meta_boxes * @see http://codex.wordpress.org/Function_Reference/add_meta_box */ public function meta_boxes() { global $_wp_post_type_features; //check for the required post type page or post or  false, 'textarea_name'=>'tn_cstm_bio', 'tabindex' => '4', 'teeny' => true ); // Define your custom wp_editor here. Use existing post content: $post->post_content wp_editor($post->post_content,'tn_cstm_bio', $settings); } /** * When the post is saved, save our customized post data * * @hook save_post */ public function save_bio_data($post_id) { // check if we're on the post page and if the nonce has been set if ( !isset( $_POST['post_type'] ) or !isset( $_POST['tn_cstm_noncename'] ) ) { return; } // check if the we're on the custom post page if ( !in_array( $_POST['post_type'], array( 'tn_cstm_people' ) ) ) { return; } // if we're doing an auto save return if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // verify nonce for the safety reasones // @see http://codex.wordpress.org/WordPress_Nonces if ( !wp_verify_nonce( $_POST['tn_cstm_noncename'], plugin_basename( __FILE__ ) ) ) return; // make sure that current user has proper rights to save the post // @see http://codex.wordpress.org/Roles_and_Capabilities if ( !current_user_can( 'edit_post', $post_id ) ) return; /* Verify that post type is not set to revision and that $post object needs to be updated *http://codex.wordpress.org/Function_Reference/wp_update_post */ // unhook this function so it doesn't loop infinitely remove_action('save_post', array($this,'save_bio_data')); // update the post, which calls save_post again $data_content = $_POST['tn_cstm_bio']; $my_post = array(); $my_post['ID'] = $post_id; $my_post['post_content'] = $data_content; wp_update_post( $my_post ); // re-hook this function don't forget to format as add_action('save_post', array($this, '$function_name'))' add_action('save_post', array($this, 'save_bio_data')); } 

Mein Problem bestand darin, vorhandene Posts zu übernehmen und sie in einen benutzerdefinierten Post-Typ umzuwandeln (der Client hatte normale Posts benutzt, um ein Personal-Verzeichnis zu erstellen). Ich wollte den Standard-Editor ändern, umbenennen und vereinfachen, während ich den vorhandenen post_content benutze.

Im Grunde habe ich mehrere bereits bestehende Lösungen (oben verlinkt) angeschaut und bin zu meinen eigenen gekommen. Die wichtige Überlegung ist, dass ich post_content , obwohl es jetzt durch eine benutzerdefinierte post_content bearbeitet wurde. Um Änderungen vorzunehmen, musste ich Updates über die function save_post wp_update_post , die in save_post .

Allerdings gibt es Probleme mit einer Endlosschleife, also musste ich die Aktion save_post wie im WP-Codex abgehakt und neu save_post . Das letzte Problem war nur die korrekte Formatierung für die remove_action und add_action , unter Berücksichtigung, dass ich sie in meiner benutzerdefinierten class add_action habe.