J'ai la fonction suivante dans mon projet:
function cr_get_menu_items($menu_location)
{
$locations = get_nav_menu_locations();
$menu = get_term($locations[$menu_location], 'nav_menu');
return wp_get_nav_menu_items($menu->term_id);
}
La fonction est utilisée dans mon thème comme ceci:
<?php $nav = cr_get_menu_items('navigation_menu') ?>
<?php foreach ($nav as $link): ?>
<a href="<?= $link->url ?>"><?= $link->title ?></a>
<?php endforeach; ?>
Ceci renvoie actuellement tous les éléments de navigation présents dans mon menu - navigation parent/de haut niveau et sous-navigation. Je me demande comment modifier cela en exclure tous les éléments de navigation secondaires. Je souhaite uniquement afficher les éléments parent/de niveau supérieur.
Regardons wp_get_nav_menu_items
référence du code .
Il faut deux paramètres:
$menu
- (int | string | WP_Term) (Obligatoire) ID de menu, slug, nom ou objet,$args
- (array) (Facultatif) Arguments à transmettre à get_posts ().Donc, nous pouvons utiliser get_posts
args ici ... Et si nous voulons obtenir uniquement les messages de premier niveau, alors post_parent
arg est utile ...
Donc, quelque chose comme ceci devrait faire l'affaire:
function cr_get_menu_items($menu_location)
{
$locations = get_nav_menu_locations();
$menu = get_term($locations[$menu_location], 'nav_menu');
return wp_get_nav_menu_items($menu->term_id, array('post_parent' => 0));
}
Cela a fonctionné pour moi:
function cr_get_menu_items($Your_menu_location)
{
$menuLocations = get_nav_menu_locations();
$YourmenuID = $menuLocations[$Your_menu_location];
$YourNavItems = wp_get_nav_menu_items($YourmenuID);
}
$Your_menu_location
est une variable chaîne représentant le nom du menu tel que 'navigation_menu'
ou 'primary'
, selon la façon dont vous avez enregistré votre menu dans functions.php
.
<?php
$menuitems = cr_get_menu_items('navigation_menu') ;
foreach ( (array)$menuitems as $menuitem )
{
if (!$menuitem->menu_item_parent )
echo '<a class="nav-link" href="'.$navItem->url.'">'.$navItem->title.' </a>';
}
?>