2

I have the following function in my project:

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

The function is used in my theme like this:

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

This currently returns all navigation items present in my menu - parent/top-level and sub navigation. I am wondering how to alter this to exclude all sub navigation items. I only want to display the parent/top-level items.

1

Let's take a look at wp_get_nav_menu_items code reference.

It takes two parameters:

  • $menu - (int|string|WP_Term) (Required) Menu ID, slug, name, or object,
  • $args - (array) (Optional) Arguments to pass to get_posts().

So we can use get_posts args in here... And if we want to get only top-level posts, then post_parent arg comes useful...

So something like this should do the trick:

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

This worked for me :

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 is a string variable representing the menu name like 'navigation_menu' or 'primary' depending on how you registered your menu in functions.php , The function is used in my theme like this:

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.