Récupération d'une liste d'éléments de menu dans un tableau


16

Je travaille actuellement sur un thème personnalisé. Dans ce thème, j'ai un menu que j'ai enregistré en utilisant register-nav-menu, puis j'affiche le menu sur ma page Web en utilisant la wp_nav_menufonction.

Cependant, j'aime récupérer la liste des éléments de menu uniquement (les noms des éléments de menu réels uniquement qui ont été utilisés dans la zone wp-admin pour créer le menu, et sans html), et je voudrais enregistrer cette liste d'éléments dans un tableau (c'est-à-dire, ne pas l'afficher).

Donc, un code pseudo ressemblerait à ceci

$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-t-il un moyen de le faire? Merci.

Réponses:



46

Comme @vancoder le mentionne, wp_get_nav_menu_items()c'est la voie à suivre, mais je pense qu'une meilleure réponse détaillée serait plus utile pour les gens à l'avenir.

Cette fonction renvoie un tableau d' WP_Post Objectobjets (vous accédez donc aux valeurs avec une flèche, par exemple $item->title).

Pour une configuration de base , vous pouvez utiliser les éléments suivants:

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

Ensuite, vous pouvez simplement parcourir cette $primaryNavvariable, par exemple:

foreach ( $primaryNav as $navItem ) {

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

}

1
pour moi, cela renvoie "faux"
John Smith

4
Êtes-vous en train de copier-coller @JohnSmith? Vous devrez utiliser l'ID de votre menu.
Brad Adams

J'ai trouvé cela beaucoup plus facile que d'utiliser la classe walker. Joli!
Lee

1

Obtenez un tableau simple de menu.

Ajouter à 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;
}

Accédez à votre fonction d'en-tête et d'appel

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

?>

C'est une réponse décente, mais elle ne va que d'un niveau.
Hybrid Web Dev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.