サポート » 使い方全般 » 記事タイトルとメニューの処理分離

  • 解決済 xaharrr

    (@xaharrr)


    いつもこちらの情報を頼りに勉強させて頂いてます。

    また、以前こちらにて大変お世話になったものです。

    申し訳ありません、今回も詰まってしまい自己解決が難しいので何とか皆様のお力をお借りしたくて書き込みさせて頂きます。

    現在、記事一覧及び個別記事にてカスタムフィールドで格納したタイトルと記事本文の切り替えまではうまくいっているのですが、切り替えた際にグローバルメニューのタイトルもカスタムフィールドの値になってしまい困っています。

    下記がコードになります。

    function list_title_en($single_content){
    		$h_meta_id = get_the_ID();
    		$meta_content = get_post_meta($h_meta_id, 'ex_title', true);
    		$single_content = $meta_content;
    		return $single_content;
    	}
    
    add_filter( 'the_content', 'list_title_en' );

    最終的には記事一覧や個別記事のタイトルのみを切り替えたいと思っています。

    また、今回はプラグイン作成に挑戦していますのでテンプレートの変更は避けたいと思っております。

    勉強不足なのは重々承知していますが、何卒よろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 実際に試してはいませんが、条件分岐タグを使って判別できないでしょうか?
    条件分岐タグ – WordPress Codex 日本語版

    例えば、個別記事なら is_single() が、アーカイブページなら is_archive() が判定に使えます。

    下記のフォーラム投稿が参考になると思います。
    singleページのタイトルを変えたい (8 件の投稿)

    アドバイスありがとうございます。
    あと、記載不備で申し訳ありません。
    このタイトルというのがページタイトルではなく、記事のタイトルになります。
    紛らわしい書き方で申し訳ありません。

    is_single() 等は既に試したのですが、使い方が悪いのか変わってしまうのです。

    add_filter( 'the_content', 'list_title_en' );

    はグローバルメニューにも適用されるものなのでしょうか?
    私の理解力ではこれはタイトルを表示する際に指定した関数処理を挟むという考えだったのですが、それだと今回の現象が理解できなくて。

    何卒よろしくお願いします。

    大変申し訳ありません。
    add_filter( 'the_content', 'list_title_en' );
    ではなく、
    add_filter( 'the_title', 'list_title_en' );
    の間違いです。

    ですので、正しいコードは

    function list_title_en($single_content){
    		$h_meta_id = get_the_ID();
    		$meta_content = get_post_meta($h_meta_id, 'ex_title', true);
    		$list_title = $meta_title;
    		return $list_title;
    	}
    add_filter( 'the_title', 'list_title_en' );

    でした。
    重ね重ね申し訳ありません。

    is_single() 等は既に試したのですが、使い方が悪いのか変わってしまうのです。

    add_filter( 'the_content', 'list_title_en' );

    はグローバルメニューにも適用されるものなのでしょうか?
    私の理解力ではこれはタイトルを表示する際に指定した関数処理を挟むという考えだったのですが、それだと今回の現象が理解できなくて。

    is_single() を条件に入れてもグローバルメニューまで変わってしまう、ということですね。

    それを伺って私も不思議に思ったので、WordPress本体のソースコードを覗いてみました。すると、ナビゲーションメニュー(グローバルメニュー)を組み立てる処理の中に、the_titleのフィルターフックを呼び出している箇所がありました。
    ソースコードのファイル wp-includes/nav-menu-template.php にある、関数 start_el の中です。

    /** This filter is documented in wp-includes/post-template.php */
    $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;

    上記のapply_filters呼び出しを省いてしまえば、グローバルメニューのタイトル変わりを避けられるのではないかと思います(実際には試していません)。しかし、これをプラグインで行うにはどのようにすればよいか、見当が付かないです。お役に立てずすみません。

    自信はないのですが、もしかすると in_the_loop が使えるかもしれませんね。
    Function Reference/in the loop

    最初は false で、テンプレート(テーマ)の中で the_post を呼び出すと true に変わり、have_posts の最後(もう投稿が無い)に false に変わるみたいです。

    体調を崩しまして、返信遅れて申し訳ありません。

    in_the_loopですね、試してみます。
    貴重なお時間を割いていただいてありがとうございます。

    結果が分かり次第こちらに報告します。
    ありがとうございます。

    ありがとうございました!

    教えていただいたin_the_loopで意図通りの挙動になりました!

    本当に助かりました!ありがとうございました!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「記事タイトルとメニューの処理分離」には新たに返信することはできません。