Posttitel aus zwei Meta-Feldern setzen

In einem benutzerdefinierten Post-Typ habe ich Post-Titel deaktiviert, aber in der Liste der Posts und in der Slug es zeigt nur den Titel als “Auto-Entwurf”. Ich möchte automatisch zwei Stücke Post-Meta nehmen und dann den Titel und die Schnecke machen.

Ich dachte, das würde funktionieren, aber ich kann es nicht schaffen:

function set_event_title( $data , $postarr ) { if($data['post_type'] == 'events') { $event_date = get_post_meta($post_id,'event_datetime',true); $event_venue = get_post_meta($post_id, 'venue_name' , true); $event_title = $event_venue . ' - ' . $event_date; $post_slug = sanitize_title_with_dashes ($event_title,'','save'); $post_slugsan = sanitize_title($post_slug); $data['post_title'] = $post_title; $data['post_name'] = $post_slugsan; } return $data; } add_filter( 'wp_insert_post_data' , 'set_event_title' , '99', 2 ); 

Wer weiß, wie ich es richtig machen kann?

Solutions Collecting From Web of "Posttitel aus zwei Meta-Feldern setzen"

Sie verwenden falsche Variable in der folgenden Zeile:

 $data['post_title'] = $post_title; 

Sie sollten $ event_title in $ post_title wie folgt verwenden:

 $data['post_title'] = $event_title; 

Erhalten Sie auch Post ID von $ postarr Parameter.

Aktualisierter Code:

 function set_event_title( $data , $postarr ) { if($data['post_type'] == 'events') { $event_date = get_post_meta($postarr['ID'],'event_datetime',true); $event_venue = get_post_meta($postarr['ID'], 'venue_name' , true); $event_title = $event_venue . ' - ' . $event_date; $post_slug = sanitize_title_with_dashes ($event_title,'','save'); $post_slugsan = sanitize_title($post_slug); $data['post_title'] = $event_title; $data['post_name'] = $post_slugsan; } return $data; } add_filter( 'wp_insert_post_data' , 'set_event_title' , '10', 2 ); 

Weitere Informationen zu diesem Filter finden Sie auf dieser Seite .

Ich fand, dass die vorherige Antwort, wie in den Kommentaren angegeben, nur funktioniert, wenn ein vorhandener Beitrag und nicht neue Beiträge gespeichert werden. Das Folgende funktioniert für neue Beiträge und bestehende Beiträge.

 // func that is going to set our title of our customer magically function w2w_customers_set_title( $data , $postarr ) { // We only care if it's our customer if( $data[ 'post_type' ] === 'w2w-customers' ) { // get the customer name from _POST or from post_meta $customer_name = ( ! empty( $_POST[ 'customer_name' ] ) ) ? $_POST[ 'customer_name' ] : get_post_meta( $postarr[ 'ID' ], 'customer_name', true ); // if the name is not empty, we want to set the title if( $customer_name !== '' ) { // sanitize name for title $data[ 'post_title' ] = $customer_name; // sanitize the name for the slug $data[ 'post_name' ] = sanitize_title( sanitize_title_with_dashes( $customer_name, '', 'save' ) ); } } return $data; } add_filter( 'wp_insert_post_data' , 'w2w_customers_set_title' , '99', 2 ); 

Es wird zuerst nach dem Titel in der Variablen $_POST , wo es die meiste Zeit kommen würde. Wenn es nicht dort ist, wird es aus dem post_meta , das Dinge wie Quick Edits behandeln wird.