it-swarm.com.de

Legen Sie den Post-Titel aus zwei Metafeldern fest

In einem benutzerdefinierten Beitragstyp sind die Beitragstitel deaktiviert. In der Liste der Beiträge und im Slug wird der Titel jedoch nur als "Auto-Entwurf" angezeigt. Ich möchte automatisch zwei Post-Meta-Stücke 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 );

Weiß jemand, wie ich es dazu bringen könnte, seine Sache richtig zu machen?

3
Eckstein

Sie verwenden in der folgenden Zeile eine falsche Variable:

$data['post_title'] = $post_title;

sie sollten $ event_title in $ post_title wie folgt verwenden:

$data['post_title'] = $event_title;

Holen Sie sich auch die Post-ID aus dem Parameter $ postarr.

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 .

3
Vinod Dalvi

Ich habe festgestellt, dass die vorherige Antwort, wie in den Kommentaren angegeben, nur funktioniert, wenn ein vorhandener Beitrag und keine neuen 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 );

Zuerst wird in der Variablen $_POST nach dem Titel gesucht, von dem er die meiste Zeit stammt. Wenn es nicht vorhanden ist, wird es aus dem post_meta abgerufen, der Dinge wie die Schnellbearbeitung behandelt.

1
Jesse Pearson