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.

Greeso
la source

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>';

}
Brad Adams
la source
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;                       

?>
Mahesh Kathiriya
la source
C'est une réponse décente, mais elle ne va que d'un niveau.
Hybrid Web Dev