ti-enxame.com

Veja o seguimento de seu sobrenome personalizado

Eu tenho um tipo de post personalizado sem suporte a título e estou tentando gerar um das taxonomias do post e campos personalizados. Para fazer isso, estou usando este código:

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 );

O problema é que, para que funcione, tenho que republicar meu post. Ele não funciona com o novo post (ainda não tem ID, eu acho) e se eu alterar os valores do campo personalizado no post, ele não irá gerar o nome deles ainda, eu vou ter que salvá-lo duas vezes para fazê-lo.

Alguém pode compartilhar uma solução com o exemplo de como é feito corretamente?

Além disso, seria legal ser capaz de definir slug personalizado também (diferente do título).

3
Kovas

Você pode tentar o seguinte código.

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

Conecte-se à ação 'save_post' ( exemplo ). Você obtém o ID do post como um parâmetro e pode fazer tudo o que fez antes. Com uma ação de salvar. :)

1
fuxia