Blog

WordPress get_nav_menuに対する考察

WordPressの移行作業をしているとメニュー周りで、エラーが出る

これはwp_get_nav_menu_itemsを利用してループを回しているために発生します。

//Footer_menuが管理画面から登録されていないとエラーになる
 $main_menu = wp_get_nav_menu_items('Footer_menu', array());
                        foreach($main_menu as $key => $menu):
                            $url = str_replace($this_url, "", $menu->url);
                            if(count($main_menu) > $key+1): ?>

wp_get_nav_menu_items関数に、引数でslugを指定してあげないといけない。ここではFooter_menu
上記エラーはその引数が与えられていないために発生します

管理画面のイメージ

しかし、WordPressテーマを利用数人はいろんな、メニュー名をつけるはず。
どんなメニュー名をつけても利用できるようにしておいてあげないといけない。
そのために。

解決法:get_nav_menu_locationsを利用する

function get_nav_menu_items_by_location($location, $args = [])
{
  // すべての場所のnavを取得 ここがポイント
  $locations = get_nav_menu_locations();

  // NavのオブジェクトIDを取得
  $object = wp_get_nav_menu_object($locations[$location]);

  // メニュー名より、メニューのアイテムを取得
  $menu_items = wp_get_nav_menu_items($object->name, $args);
//メニューのpostオブジェクトを返却
  return $menu_items;
}

これで場所さえ指定すれば、どんなメニュー名でもエラーは出なくなります。
めでたし めでたし


一つ前の記事 WordPress多言語対応 マルチサイト構築手順
次の記事 IT内製化しないと企業が消滅していく理由