Recuperando uma lista de itens de menu em uma matriz


16

Atualmente, estou trabalhando em um tema personalizado. Nesse tema, tenho um menu que me registrei usando register-nav-menue, em seguida, estou exibindo o menu na minha página da web usando a wp_nav_menufunção

No entanto, eu gostaria de recuperar apenas a lista de itens de menu (apenas os nomes reais dos itens de menu que foram usados ​​na área wp-admin para criar o menu e sem nenhum html), e gostaria de salvar essa lista de itens em uma matriz (ou seja, não exibi-lo).

Então, um código psuedo ficaria assim

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

Existe uma maneira de fazer isso? Obrigado.

Respostas:



46

Como o @vancoder menciona, wp_get_nav_menu_items()é o caminho a seguir, no entanto, acho que uma resposta mais detalhada seria mais útil para as pessoas no futuro.

Essa função retorna uma matriz de WP_Post Objectobjetos (para acessar os valores com uma seta, por exemplo $item->title).

Para uma configuração básica , você pode usar o seguinte:

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

Então você pode simplesmente fazer um loop sobre essa $primaryNavvariável, por exemplo:

foreach ( $primaryNav as $navItem ) {

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

}

1
Para mim, este retorna "false"
John Smith

4
Você está copiando e colando @JohnSmith? Você precisará usar o ID do seu menu.
Brad Adams

Achei isso muito mais fácil do que usar a classe walker. Agradável!
Lee

1

Obtenha uma matriz simples de menu.

Adicionar a 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;
}

Vá para a função Cabeçalho e Chamada

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

?>

Esta é uma resposta decente, no entanto, só vai 1 nível de profundidade.
Hybrid Web Dev
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.