ดึงรายการของรายการเมนูในอาร์เรย์


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
}

มีวิธีทำเช่นนั้นหรือไม่? ขอบคุณ

คำตอบ:



48

@vancoder กล่าวถึงwp_get_nav_menu_items()เป็นวิธีที่จะไป แต่ฉันคิดว่าคำตอบรายละเอียดที่ดีกว่าจะเป็นประโยชน์สำหรับผู้คนในอนาคต

ฟังก์ชัน Said ส่งคืนอาร์เรย์ของ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"
John Smith

4
คุณคัดลอก @JohnSmith แล้วหรือยัง คุณจะต้องใช้ของคุณ ID เมนู
แบรดอดัมส์

ฉันพบสิ่งนี้ง่ายกว่าการใช้คลาสวอล์คเกอร์ ทำได้ดีนี่!
ลี

2

รับเมนูแบบง่าย ๆ

เพิ่มไปยัง Function.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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.