it-swarm.com.de

Geben Sie mit wp_get_nav_menu_items nur Navigationselemente der obersten Ebene aus einem Menü zurück

Ich habe folgende Funktion in meinem Projekt:

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);
}

Die Funktion wird in meinem Theme folgendermaßen verwendet:

  <?php $nav = cr_get_menu_items('navigation_menu') ?>
  <?php foreach ($nav as $link): ?>
    <a href="<?= $link->url ?>"><?= $link->title ?></a>
  <?php endforeach; ?>

Dies gibt derzeit alle in meinem Menü vorhandenen Navigationselemente zurück - übergeordnete/übergeordnete und untergeordnete Navigation. Ich frage mich, wie ich dies ändern kann, um alle Unter-Navigationselemente auszuschließen . Ich möchte nur die übergeordneten/übergeordneten Elemente anzeigen.

1
Liz

Werfen wir einen Blick auf wp_get_nav_menu_itemscode reference .

Es werden zwei Parameter benötigt:

  • $menu - (int | string | WP_Term) (Erforderlich) Menü ID, Slug, Name oder Objekt,
  • $args - (array) (Optional) Argumente, die an get_posts () übergeben werden sollen.

Also können wir hier get_posts args verwenden ... Und wenn wir nur Beiträge auf oberster Ebene erhalten möchten, ist post_parent arg nützlich ...

So etwas sollte den Trick machen:

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));
}
1

Das hat bei mir funktioniert:

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 ist eine Zeichenfolgenvariable, die den Menünamen wie 'navigation_menu' oder 'primary' darstellt, je nachdem, wie Sie Ihr Menü in functions.php registriert haben. Die Funktion wird in meinem Design folgendermaßen verwendet:

<?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>';
  }
?>
0
Aness