wp_get_nav_menu_items() でメニューの全項目を配列で取得
<?php
$menu_location_id = get_nav_menu_locations()["nav_slug_registred"];// キーは register_nav_menus で指定したもの。返値は int。
$wp_term_object = wp_get_nav_menu_object($menu_location_id);
$menu_items = wp_get_nav_menu_items($wp_term_object);
?>
<nav>
<ul>
<?php
foreach($menu_items as $key => $item){
// current page かの判定
$current = ($_SERVER['REQUEST_URI'] == parse_url($item->url, PHP_URL_PATH)) ? 'font-bold' : '';
?>
<li><a href="<?= $item->url ?>" class="<?= $current ?>"><?= $item->title ?></a></li>
<?php
}
?>
</ul>
</nav>
<?php
WordPress の管理画面から登録したグローバルメニューは、wp_nav_menu()
で表示させるものと思っていた。
そうするとき、bootstrap や tailwind の class を付けたい場合に、 nav_menu_css_class
や nav_menu_link_attributes
に介入する処理を書く必要があり、不親切な仕組みだなと思っていた。
ところが、登録したメニューのデータだけを取得する関数がある事を知ったので、記録に残す。
上記の wp_get_nav_menu_items()
でメニュー情報だけを取得し、繰り返し処理にかければ、classは付け放題だ。
カレントページかどうかの判定は自力で行う必要があるが、上記のように簡単に判定できる。
wp_get_nav_menu_items() の引数は、get_nav_menu_locations() で得られる id でいいのかもしれない。