使用wp_get_NAV_MENU_ITEMS仅返回菜单中的顶级导航项目

时间:2018-04-26 作者:Liz

我在我的项目中具有以下功能:

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);
}
该函数在我的主题中使用如下:

  <?php $nav = cr_get_menu_items(\'navigation_menu\') ?>
  <?php foreach ($nav as $link): ?>
    <a href="<?= $link->url ?>"><?= $link->title ?></a>
  <?php endforeach; ?>
此操作当前返回“我的菜单-父/顶级”和“子导航”中的所有导航项。我想知道如何将此更改为exclude 所有子导航项。我只想显示父级/顶级项目。

2 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

让我们看看wp_get_nav_menu_items code reference.

它需要两个参数:

  • $menu - (int | string | WP\\u Term)(必需)菜单ID、slug、名称或对象$args - (array)(可选)要传递给get\\u posts()的参数get_posts 此处的参数。。。如果我们只想获得顶级职位post_parent arg很有用。。。

    所以像这样的事情应该可以做到:

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

SO网友:Aness

这对我很有用:

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 是表示菜单名称的字符串变量,如\'navigation_menu\'\'primary\' 取决于您在中注册菜单的方式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>\';
  }
?>

结束

相关推荐

Organize functions.php

组织职能的最佳方式是什么。php的性能?我有几个add\\u操作调用、几个add\\u主题支持、几个add\\u过滤器和4个附加函数。对于面包屑、样式表、注册菜单和小部件。我们是否需要遵守订单?例如,首先是所有add\\u过滤器函数,然后是add theme\\u support等。不确定添加代码是否相关,因为这是一个一般性问题。如果需要,我很乐意更新这篇文章。