wp_get_nav_menu_items() の使い方|説明・引数・注意点

説明

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

コメント

タイトルとURLをコピーしました