web-dev-qa-db-ja.com

カスタムタイトル付きのカスタム投稿タイプ

私はタイトルをサポートしないカスタム投稿タイプを持っていて、投稿の分類法とカスタムフィールドからそれを生成しようとしています。そうするために、私はこのコードを使っています:

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

問題は、それを機能させるために、私は自分の投稿を再公開する必要があることです。新しい投稿では機能しません(まだIDがないため、postでカスタムフィールドの値を変更してもまだ名前が生成されません)。

誰かがそれが適切に行われている方法の例と解決策を共有することはできますか?

また、カスタムスラッグを設定できるのもいいでしょう(タイトルとは異なります)。

3
Kovas

次のコードを試すことができます。

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

アクション'save_post'にフックします( )。投稿IDをパラメータとして取得したら、以前に行ったことはすべて実行できます。 1回の保存操作で。 :)

1
fuxia