サポート » 使い方全般 » カスタムメニューでthe_titleのフックが上手く反映されません。

  • 解決済 Mizuho Ogino

    (@fishpie)


    下記のようなコードを二カ国語に対応したウェブサイトに使用しています。カスタムフィールドに英語のタイトルを入力してそれを取得しています。

    function translate_title_filter( $title, $id ) {
    	if ( isset( $_GET['lang'] ) && $_GET['lang'] !== 'ja' ) {
    		$newtitle = get_post_meta( $id, 'title_en', true );
    		if ( $newtitle ) $title = $newtitle;
    	}
        return $title;
    }
    add_filter( 'the_title', 'translate_title_filter', 10, 2 );

    これで大半の置換は上手くいったのですが、表題の通りカスタムメニューを制作した場合のみ上手く反映されません。取得されるIDがpostidとは異なっているためで、ウィジェットの中でもグローバルメニューの中でも同じ現象になります。

    何かご存知の方がいれば教えていただけませんでしょうか。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • 管理画面の 外観 » メニュー を使ってカスタムメニューを作ったのでしたら、投稿ページのパーマリンク(URL)にリンクテキスト(メニュー項目)を付けることになるので、英語に変えたいのは投稿ページのタイトルではなくリンクテキストですよね。そこに the_title フィルターを使っていることから考えて、違う方法でカスタムメニューを作られたのでしょうか。

    トピック投稿者 Mizuho Ogino

    (@fishpie)

    その通りですね。お恥ずかしい。

    何故かリンクテキストは固定ページと同じように自動的に反映されているとすっかり思い違いをしていました。カスタムメニューを使うなら英語版のカスタムメニューも作成すればよいことですね。

    的確なツッコミに心より感謝いたします。

    ———————
    追伸

    ところで、カスタムメニューのリンクテキストもthe_titleフィルターが反映されるようです。そこで取得されるIDはリンク先のIDとは異なります。おそらくカスタムメニューの項目毎にIDを振っているではないかと思います。IDが不要なフィルタリングのケース(タグで囲むとか)ならカスタムメニューにもthe_titleが使えるようです。

    下記(本家Codex)を読むと、作ったメニューのデータも普通の投稿と同じく wp_posts テーブルへ格納されるそうです。
    Database Description » Table Overview

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタムメニューでthe_titleのフックが上手く反映されません。」には新たに返信することはできません。