it-swarm.com.de

Benutzerdefinierter Beitragstyp mit benutzerdefiniertem Titel

Ich habe einen benutzerdefinierten Beitragstyp ohne Titelunterstützung und versuche, einen aus den Taxonomien und benutzerdefinierten Feldern des Beitrags zu generieren. Dazu benutze ich diesen Code:

function custom_post_type_title_filter( $data , $postarr )
    {
      if ($postarr['post_type'] == 'cars'){
            $id = get_the_ID();
            $engine= ', '.get_post_meta($id, 'Engine', true).'l';
            $terms = wp_get_object_terms($id, 'brand');
            $abrand= ' '.$terms[0]->name;
            $amodel = ' '.$terms[1]->name;
            $data['post_title'] = $id.$abrand.$amodel.$engine;
      }
      return $data;
    }
    add_filter( 'wp_insert_post_data' , 'custom_post_type_title_filter' , 99, 2 );

Das Problem ist, dass ich meinen Beitrag erneut veröffentlichen muss, damit er funktioniert. Es funktioniert nicht mit neuen Posts (ich denke, es hat noch keine ID) und wenn ich benutzerdefinierte Feldwerte in Posts ändere, wird noch kein Name daraus generiert. Ich muss ihn zweimal speichern, um es zu erledigen.

Kann jemand eine Lösung mit Beispiel teilen, wie es richtig gemacht wird?

Wäre auch schön, wenn ich auch einen benutzerdefinierten Slug setzen könnte (abweichend vom Titel).

3
Kovas

Sie können den folgenden Code versuchen.

function custom_post_type_title ( $post_id ) {
    global $wpdb;
    if ( get_post_type( $post_id ) == 'cars' ) {
        $engine= ', '.get_post_meta($post_id, 'Engine', true).'l';
        $terms = wp_get_object_terms($post_id, 'brand');
        $abrand= ' '.$terms[0]->name;
        $amodel = ' '.$terms[1]->name;
        $title = $post_id.$abrand.$amodel.$engine;
        $where = array( 'ID' => $post_id );
        $wpdb->update( $wpdb->posts, array( 'post_title' => $title ), $where );
    }
}
add_action( 'save_post', 'custom_post_type_title' );
7

Haken Sie in die Aktion 'save_post' ( Beispiel ). Sie erhalten die Post-ID als Parameter und können dann alles tun, was Sie zuvor getan haben. Mit einem Speichervorgang. :)

1
fuxia