wp_nav_menuの処理中かどうかを判別

 wp_nav_menu()で出力されるタイトル(post_title)を、wp_nav_menuの時だけ変更する必要があり、the_titleでフィルターするために、現在wp_nav_menuの処理中かどうかを判別する関数を書いてみました。

function wp_nav_menu_in_process($theme_location=NULL) {
 $tree = debug_backtrace();
 foreach ($tree as $f) {
  if (isset($f['class']) && $f['class'] == 'Walker_Nav_Menu') {
   if ($f['args'][1] instanceof WP_Post) {
    if ($theme_location) {
     if ($f['args'][3]->theme_location == $theme_location) { return $f['args'][1]; }
     else { return false; }
    }
    return $f['args'][1];
   }
  }
 }
 return false;
}

引数 (string) $theme_location を与えた場合、その Nav Menu の theme_location が一致したらオブジェクトを返し、そうでなければ falseを返します。
そうでない場合は、単に、そのノード(nav_menu_item のオブジェクト)を返します。
オブジェクトが返った場合は $object->object_id でノードの post id を得られます。
なお、仕様から追ったわけではないので、間違っているかもしれません。
仕様は自己責任で!

Leave a Reply