Lấy danh sách các mục menu trong một mảng


16

Tôi hiện đang làm việc trên một chủ đề tùy chỉnh. Trong chủ đề này, tôi có một menu mà tôi đã đăng ký sử dụng register-nav-menu, và sau đó tôi đang hiển thị menu cho trang web của mình bằng wp_nav_menuchức năng.

Tuy nhiên, tôi chỉ muốn truy xuất danh sách các mục menu (chỉ các tên mục menu thực tế được sử dụng trong khu vực wp-admin để tạo menu và không có bất kỳ html nào) và tôi muốn lưu danh sách các mục đó vào một mảng (tức là không hiển thị nó).

Vì vậy, một mã psuedo sẽ trông như thế này

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

Có cách nào để làm như vậy? Cảm ơn.

Câu trả lời:



46

Như @vancoder đề cập, wp_get_nav_menu_items()là con đường để đi, tuy nhiên tôi nghĩ rằng một câu trả lời chi tiết tốt hơn sẽ hữu ích hơn cho mọi người trong tương lai.

Hàm đã nói trả về một mảng các WP_Post Objectđối tượng (vì vậy bạn truy cập các giá trị bằng một mũi tên, ví dụ. $item->title).

Để thiết lập cơ bản , bạn có thể sử dụng như sau:

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

Sau đó, bạn có thể chỉ cần lặp qua $primaryNavbiến đó , ví dụ:

foreach ( $primaryNav as $navItem ) {

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

}

1
với tôi điều này trả về "sai"
John Smith

4
Bạn có đang sao chép @JohnSmith không? Bạn sẽ cần sử dụng ID menu của bạn .
Brad Adams

Tôi thấy điều này dễ dàng hơn nhiều so với việc sử dụng lớp walker. Đẹp quá
Lee

1

Nhận mảng đơn giản của menu.

Thêm vào hàm.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;
}

Chuyển đến chức năng gọi và tiêu đề của bạn

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

?>

Đây là một câu trả lời khá, tuy nhiên nó chỉ đi sâu 1 cấp.
Lai Web Dev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.