説明
wp_get_nav_menu_items() は、メニューに登録された項目(リンク)を配列で取得する関数です。
基本構文
wp_get_nav_menu_items( int|string|WP_Term $menu, array $args = array() ): array|false
引数
$menu:メニューのID、スラッグ、名前$args:並び順などのオプション
戻り値
メニュー項目の配列。
使い方(サンプル)
$items = wp_get_nav_menu_items( 'header-menu' );
if ( $items ) {
foreach ( $items as $item ) {
var_dump( $item->title );
}
}
注意点
- HTMLを自動生成する
wp_nav_menu()と違い、データだけを取得します。独自のマークアップを作るときに便利です。
実務での使いどころ
- メニューの項目を、配列で取得して、独自のHTMLで出力するとき。
- メニューの項目から、タイトルやURLだけを、取り出すとき。
よくあるミスと対処
- メニューが存在しないとき、
falseが返る。確認せずにforeachに渡す。 - 階層構造にならない。親子関係は、
menu_item_parentで、自分で組み立てる。 - 場所(
theme_location)から、メニューを探したいのに、メニューのIDを、指定している。場所からは、get_nav_menu_locations()でIDを取得する。
NG例
foreach ( wp_get_nav_menu_items( 'main' ) as $item ) { // false のとき、警告になる
echo $item->title;
}
OK例
$locations = get_nav_menu_locations();
if ( isset( $locations['header'] ) ) {
$items = wp_get_nav_menu_items( $locations['header'] );
if ( $items ) {
foreach ( $items as $item ) {
echo '<a href="' . esc_url( $item->url ) . '">' . esc_html( $item->title ) . '</a>';
}
}
}
使い分け早見表
| 関数 | 役割 |
|---|---|
wp_get_nav_menu_items() |
メニューの項目を、配列で取得する |
get_nav_menu_locations() |
場所と、メニューのIDの対応を、取得する |
wp_nav_menu() |
メニューを、HTMLで出力する |
関連項目
wp_nav_menu()、get_nav_menu_locations()
公式リファレンス:wp_get_nav_menu_items() | Function | WordPress Developer Resources

コメント