Отримання списку елементів меню в масиві


17

Зараз я працюю над власною темою. У цій темі у мене є меню, яке я зареєстрував за допомогою register-nav-menu, а потім я показую меню на своїй веб-сторінці за допомогою wp_nav_menuфункції.

Однак мені подобається отримати лише список пунктів меню (лише фактичні назви пунктів меню, які використовувались в області wp-admin для створення меню, і без будь-якого html), і я хотів би зберегти цей список елементів у масиві (тобто не відображати його).

Отже, код psuedo виглядав би так

$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
}

Чи є спосіб зробити це? Спасибі.

Відповіді:



49

Як згадує @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
мені це повертається "помилково"
Джон Сміт

4
Ви вставляєте копію @JohnSmith? Ви повинні будете використовувати ваш ідентифікатор параметра меню.
Бред Адамс

Мені це було набагато простіше, ніж використання класу ходунків. Хороший!
Лі

2

Отримайте простий масив меню.

Додати в 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 рівень глибше.
Hybrid Web Dev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.