WordPressテーマSANGOの質問

モバイル用フッター固定メニューのカスタムリンクのURLに動的なクエリをつけたい

アバター
iue

いつもありがとうございます。

表題の通り、モバイル用フッター固定メニューでカスタムリンクを作成し、例えば
https://test.com/hogehoge/
というURLにリンクさせるアイコンメニューを下記のように1つ作成したとして、このリンクを
https://test.com/hogehoge/?post_id=%post_id%
というような形にして、どの記事から遷移したのか分かるようにしたい場合、どうすれば良いでしょうか?

%post_id%が記事IDに自動で変換されるようなfunctionの処理は既に書いており、ウィジェットの記事コンテンツ後広告のhtmlや記事本文で上記のような書き方をしたときにはしっかり%post_id%が記事IDに置換されています。

しかし、モバイル用フッター固定メニューで設定すると記事IDに変換されず、そのまま表示されてしまいます。

ご教授いただけると幸いです。よろしくお願いします。

モバイル用フッター固定メニューの設定方法
コメントへの回答
サルワカくん
サルワカくん
2021/02/04

お世話になっております。

%post_id%を変換するのはどの様な処理を書いているのでしょうか?
filterなどの処理を使っているという理解でよろしいでしょうか?
であれば、add_filter('nav_menu_item_title', '実行したい関数名')と記述すると動作しないでしょうか?
よろしくお願いします。

アバター
iue
2021/02/07

ご指摘の通り、filterで処理をしていて、下記のように書いてみたんですが、うまくいかず、?post_id=%post_id%とそのままクエリがついてしまいます。ウィジェット等のテキスト置換はうまくいっています(?post_id=hogehoge みたいな形で置換に成功している)。

管理画面でメニューに設定しているカスタムリンクのURLは
/hoge/?post_id=%post_id%
というような形で設定してます。

以下、function.phpのコードです。
/**
* テキスト置換関数
*/
function hoge_text_replace($text)
{
// 投稿情報
global $post;
if (strpos($text, '%post_') !== false) {
$text = str_replace('%post_id%', $post->post_name, $text);
}
return $text;
}

/**
* 本文置換フィルター
*/
add_filter('widget_text', 'hoge_text_replace');
add_filter('the_content', 'hoge_text_replace');
add_filter('nav_menu_item_title', 'hoge_text_replace');

お手数おかけしますが、改めてご回答いただけると大変助かります。よろしくお願いします。

サルワカくん
サルワカくん
2021/02/08

お世話になっております。
こちらの環境で下記の様に書いてみましたが正しく動作している様です。
お確かめください。
また、phpを使ったカスタマイズはサポート対象外になりますのでよろしくおねがいします。


add_filter('nav_menu_item_title', 'hoge_text_replace');

function hoge_text_replace($text) {
  global $post;
  if (strpos($text, '%post_') !== false) {
    $text = str_replace('%post_id%', $post->post_name, $text);
  }
  return $text;
}