배열에서 메뉴 항목 목록 검색


16

나는 현재 커스텀 테마를 만들고 있습니다. 이 테마에는을 사용하여 등록한 register-nav-menu메뉴가 있는데 wp_nav_menu기능을 사용하여 웹 페이지에 메뉴를 표시하고 있습니다 .

그러나 메뉴 항목 목록 만 검색하고 싶습니다 (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
}

그렇게하는 방법이 있습니까? 감사.

답변:



47

@vancoder가 언급했듯이 wp_get_nav_menu_items()갈 길입니다. 그러나 더 자세한 답변이 미래 사람들에게 더 도움이 될 것이라고 생각합니다.

이 함수는 WP_Post Object객체 배열을 반환 하므로 화살표로 값에 액세스합니다 (예 :) $item->title.

A의 기본 설정, 당신은 다음을 사용할 수 있습니다 :

$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를 복사하여 붙여넣고 있습니까? 메뉴의 ID 를 사용해야 합니다 .
브래드 아담스

나는 워커 클래스를 사용하는 것보다 훨씬 쉽다는 것을 알았습니다. 좋은 것!
Lee

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 단계 깊이입니다.
하이브리드 웹 개발자
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.