web-dev-qa-db-fra.com

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

Je travaille actuellement sur un thème personnalisé. Dans ce thème, j’ai enregistré un menu avec register-nav-menu, puis j’affiche le menu sur ma page Web à l’aide de la fonction wp_nav_menu.

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

Donc, un code psuedo 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
}

Y a-t-il un moyen de le faire? Merci.

11
Greeso

wp_get_nav_menu_items semblerait être exactement ce dont vous avez besoin. Il retourne un tableau d'objets de menu.

7
vancoder

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

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

Pour un basic setup, 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 variable $primaryNav, par exemple:

foreach ( $primaryNav as $navItem ) {

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

}
36
Brad Adams