サポート » 使い方全般 » add_filterでthe_titleをpost_type毎に出力したい

  • 解決済 lotokunn

    (@lotokunn)


    
    <?php
    
    // タイトルをACFの製品名に変更
    function my_auto_title( $title ){
     
        global $post;
    
        // ポストタイプがカスタムかどうかチェック
        if( $post->post_type == 'product' ){
            $title = get_field( 'product_name' );
        }
    
        return $title;
     
    }
    
        add_filter( 'the_title', 'my_auto_title', '未設定' );
        add_filter( 'single_post_title', 'my_auto_title', '未設定' );
    
    ?>

    上記の様にadd_filterを使いmy_autotitleを読み込ませています。
    $titleは、ACFieldのプラグインを使いカスタムフィールドのラベル名を取得しています。

    home.php画面では正常に、メニューの表紙がされます。(ダッシュボードのメニューから作ったメニュー)
    また、home中のthe_title( ”, ‘
    ‘, true )もACFieldのラベルが正常に表示されます。

    しかし、
    single.php中のメニューがACFieldのラベル名に変わってしまいます。

    原因が分からないのですが、感覚として、single.phpに遷移した際にそのpost_typeを取得して(post_type = product)、the_title()が変わっている様に感じます。

    どの様にすれば、
    single.php中のメニューはダッシュボードから作ったメニューの表示にようのままにして、
    the_title()を、ACFieldのカスタムフィールドのラベル名にできるのでしょうか???

    どなたかご教授、いただきたく思います。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    グローバル変数の $post は、現在のページの投稿オブジェクトになります。
    the_title フックの第2引数の投稿 ID、single_post_title フックの第2引数の投稿オブジェクトを使用するといいのではないでしょうか?

    例:

    function my_auto_title( $title, $p ){
    
    	//global $post;
    	$p = is_object( $p ) ? $p : get_post( $p );
    
    	// ポストタイプがカスタムかどうかチェック
    	if ( $p->post_type == 'product' ) {
    		$title = get_field( 'product_name', $p->ID );
    	}
    
        return $title;
     
    }
    
    add_filter( 'the_title', 'my_auto_title', 10, 2 );
    add_filter( 'single_post_title', 'my_auto_title', 10, 2 );
    トピック投稿者 lotokunn

    (@lotokunn)

    今晩は。ishitake様。早速、返信ありがとうございます。

    無事、問題がクリア出来ました。ありがとうございます。

    global $postの使い方が違った様ですね。理解しました。
    今後とも、よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「add_filterでthe_titleをpost_type毎に出力したい」には新たに返信することはできません。