配列内のメニュー項目のリストを取得する


16

現在、カスタムテーマに取り組んでいます。このテーマでは、を使用して登録しregister-nav-menuたメニューがあり、wp_nav_menu関数を使用してWebページにメニューを表示しています。

ただし、メニュー項目のリスト(wp-adminエリアでメニューを作成するために使用された実際のメニュー項目名のみ、およびhtmlなし)のみを取得したいので、その項目リストを配列に保存したい(つまり、表示しない)。

したがって、擬似コードは次のようになります

$menu_items = get_list_of_items($name_of_menu); // $name_of_menu is the result of register-nav-menu, and get_list_of_items is the psuedo function
foreach ($menu_items as $item) {
    // do something with the item
}

そうする方法はありますか?ありがとう。

回答:



46

@vancoderが言及しているように、それwp_get_nav_menu_items()は進むべき道ですが、より詳細な回答が将来の人々にとってより役立つと思います。

この関数は、WP_Post Objectオブジェクトの配列を返します(したがって、矢印で値にアクセスします(例:)$item->title)。

以下のための基本的な設定は、次のように使用できます。

$menuLocations = get_nav_menu_locations(); // Get our nav locations (set in our theme, usually functions.php)
                                           // This returns an array of menu locations ([LOCATION_NAME] = MENU_ID);

$menuID = $menuLocations['primary']; // Get the *primary* menu ID

$primaryNav = wp_get_nav_menu_items($menuID); // Get the array of wp objects, the nav items for our queried location.

次に、その$primaryNav変数をループするだけで済みます。次に例を示します。

foreach ( $primaryNav as $navItem ) {

    echo '<li><a href="'.$navItem->url.'" title="'.$navItem->title.'">'.$navItem->title.'</a></li>';

}

1
私にとって、これは「false」を返します
ジョン・スミス

4
@JohnSmithをコピーして貼り付けていますか?メニューのID を使用する必要があります。
ブラッドアダムス

これは、walkerクラスを使用するよりもはるかに簡単だとわかりました。良いですね!
リー

1

メニューの単純な配列を取得します。

Functions.phpに追加

    function wp_get_menu_array($current_menu) {

    $array_menu = wp_get_nav_menu_items($current_menu);
    $menu = array();
    foreach ($array_menu as $m) {
        if (empty($m->menu_item_parent)) {
            $menu[$m->ID] = array();
            $menu[$m->ID]['ID'] = $m->ID;
            $menu[$m->ID]['title'] = $m->title;
            $menu[$m->ID]['url'] = $m->url;
            $menu[$m->ID]['children'] = array();
        }
    }
    $submenu = array();
    foreach ($array_menu as $m) {
        if ($m->menu_item_parent) {
            $submenu[$m->ID] = array();
            $submenu[$m->ID]['ID'] = $m->ID;
            $submenu[$m->ID]['title'] = $m->title;
            $submenu[$m->ID]['url'] = $m->url;
            $menu[$m->menu_item_parent]['children'][$m->ID] = $submenu[$m->ID];
        }
    }
    return $menu;
}

ヘッダーに移動して関数を呼び出す

<?php
 $a = wp_get_menu_array('top-menu-header');                         
 print_r($a); exit;                       

?>

これはまともな答えですが、深さは1レベルしかありません。
ハイブリッドWeb開発
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.