wp_get_nav_menu_items()


WordPress関数wp_get_nav_menu_items()は、指定されたナビゲーションメニューの項目を取得するために使用されます。この関数を利用することで、カスタムメニューを動的に操作できます。

構文

wp_get_nav_menu_items( $menu, $args = array() );

引数の説明:

  • $menu (mixed) — メニュー名、ID、またはオブジェクト。
  • $args (array) — 追加のオプションを指定する配列。

例 1: メニュー項目を取得する

このコードは、特定のメニューの項目を取得します。

<?php
$menu_items = wp_get_nav_menu_items( 'main-menu' );
foreach ( $menu_items as $item ) {
    echo $item->title;
}
?>

例 2: 現在の投稿に関連するメニューを取得する

現在表示されている投稿に基づいてメニュー項目をフィルタリングする例です。

<?php
$menu_items = wp_get_nav_menu_items( 'header-menu', array( 'post_status' => 'publish' ) );
foreach ( $menu_items as $item ) {
    if ( $item->object_id === get_the_ID() ) {
        echo $item->title;
    }
}
?>

例 3: メニューリンクをHTMLリストとして表示する

メニュー項目を動的にHTMLリスト形式でレンダリングします。

<?php
$menu_items = wp_get_nav_menu_items( wp_get_nav_menu_object( 'footer-menu' ) );
echo '<ul>';
foreach ( $menu_items as $item ) {
    echo '<li><a href="' . esc_url( $item->url ) . '">' . esc_html( $item->title ) . '</a></li>';
}
echo '</ul>';
?>

例 4: 深い階層構造を持つメニューを処理する

メニュー項目を親子構造として表示します。

<?php
$menu_items = wp_get_nav_menu_items( 'main-menu' );
$menu_tree = array();
foreach ( $menu_items as $item ) {
    $menu_tree[$item->menu_item_parent][] = $item;
}

function render_menu_tree( $items, $parent_id = 0 ) {
    if ( empty( $items[$parent_id] ) ) return;
    echo '<ul>';
    foreach ( $items[$parent_id] as $item ) {
        echo '<li>' . esc_html( $item->title );
        render_menu_tree( $items, $item->ID );
        echo '</li>';
    }
    echo '</ul>';
}
render_menu_tree( $menu_tree );
?>

注意事項

  • $menuに渡す値が無効な場合、関数はfalseを返します。
  • キャッシュを有効にして、パフォーマンスを最適化することをお勧めします。

関連機能: