Beitrag beim Speichern aktualisieren

Ich versuche herauszufinden, wie ich die Details eines Posts ändern kann, nachdem sich sein Status geändert hat.

Ich möchte den Titel des Posts ändern, indem ich die Post-ID-Nummer an ihn angehängt habe. Hier ist der Code, mit dem ich gerade arbeite, aber der Titel des Posts wird nicht geändert:

function update_post_info( $post_id, $post, $update ) { // Stop anything from happening if revision if ( wp_is_post_revision( $post_id ) ) return; //get post type $post_type = get_post_type($post_id); // If this isn't a custom post, don't update it. // if ( "cbre_access_form" != $post_type ) return; //run codes based on post status $post_status = get_post_status(); if ( $post_status != 'draft' ) { if ( isset( $_POST['post_title'] ) ) { //stuck on this part not changing post title $ppt = 'test title - '.$post_id; update_post_meta( $post_id, 'post_title', $ppt ); } } } add_action( 'save_post', 'update_post_info', 10, 3 ); 

Solutions Collecting From Web of "Beitrag beim Speichern aktualisieren"

Der Titel eines post_title ( post_title ) wird nicht in Metadaten gespeichert. es ist ein Feld innerhalb der Post-Tabelle.

Hier ist eine aktualisierte Version Ihres Originalcodes.

  • Endlosschleife wird verhindert, indem der callback wpse246957_update_post_info entfernt und dann erneut wpse246957_update_post_info .

  • Der - $post_id erfolgreich mit dem Suffix gespeichert - $post_id Es wird - $post_id ob das Suffix erneut hinzugefügt wird, wenn es bereits hinzugefügt wurde.

 add_action( 'save_post', 'wpse246957_update_post_info', 10, 3 ); function wpse246957_update_post_info( $post_id, $post, $update ) { // Stop anything from happening if revision if ( wp_is_post_revision( $post_id ) ) { return; } // unhook this function so it doesn't loop infinitely remove_action( 'save_post', 'wpse246957_update_post_info' ); // get post type $post_type = get_post_type( $post_id ); // If this isn't a custom post, don't update it. // if ( "cbre_access_form" != $post_type ) return; // run codes based on post status $post_status = get_post_status(); if ( $post_status != 'draft' ) { if ( isset( $_POST['post_title'] ) ) { $suffix = ' - ' . $post_id; if ( ! preg_match( '/' . preg_quote( $suffix, '/' ) . '$/', $_POST['post_title'] ) ) { wp_update_post( [ "ID" => $post_id, "post_title" => $_POST['post_title'] . $suffix, ] ); } } } // re-hook this function add_action( 'save_post', 'wpse246957_update_post_info', 10, 3 ); } 

Persönlich würde ich wahrscheinlich das Suffix anhängen, bevor ich den Titel in deiner Vorlagendatei ausspreche oder wo auch immer du den Titel ausgibst, da es bei der obigen Vorgehensweise einen Randfall geben könnte, wenn es darum geht, den Posttitel erneut zu speichern.

post_title gespeichert in den posts die Tabelle als post_title nicht in der post_meta; Außerdem müssen Sie den save_post Hook entfernen und dann hinzufügen, weil wp_update_post zu wp_update_post führt und die endlose Schleife erzeugt .

 function update_post_info( $post_id, $post, $update ) { // Stop anything from happening if revision if ( wp_is_post_revision( $post_id ) ) return; //get post type $post_type = get_post_type($post_id); // If this isn't a custom post, don't update it. // if ( "cbre_access_form" != $post_type ) return; //run codes based on post status $post_status = $post->post_status; if ( $post_status != 'draft' ) { if ( isset( $_POST['post_title'] ) ) { $my_post = array( 'ID' => $post_id, 'post_title' => $_POST['post_title'].' - '.$post_id, ); if ( ! wp_is_post_revision( $post_id ) ) { // unhook this function so it doesn't loop infinitely remove_action('save_post', 'update_post_info'); // update the post, which calls save_post again wp_update_post( $my_post ); // re-hook this function add_action('save_post', 'update_post_info'); } } } } add_action( 'save_post', 'update_post_info', 10, 3 );