web-dev-qa-db-fra.com

Type de message personnalisé avec titre personnalisé

J'ai un type d'article personnalisé sans prise en charge du titre et j'essaie d'en générer un à partir des taxonomies et des champs personnalisés de l'article. Pour ce faire, j'utilise ce 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 );

Le problème est, pour que cela fonctionne, je dois republier mon message. Cela ne fonctionne pas avec le nouveau message (il n'a pas encore d'identifiant, je suppose) et si je modifie les valeurs de champ personnalisées dans le message, cela ne générera pas encore le nom de celui-ci.

Quelqu'un peut-il partager une solution avec un exemple sur la manière de procéder correctement?

Aussi, serait bien de pouvoir définir une slug personnalisée (différente du titre).

3
Kovas

Vous pouvez essayer le code suivant.

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
Hameedullah Khan

Accrochez-vous dans l'action 'save_post' ( exemple ). Vous obtenez l'ID de publication en tant que paramètre, puis vous pouvez faire tout ce que vous avez fait auparavant. Avec une action de sauvegarde. :)

1
fuxia