Check if a menu is empty?

时间:2015-11-05 作者:o_O

我将菜单设置为与页面上的自定义字段相对应。即在自定义字段=>菜单名下有三页的菜单1、菜单2和菜单3。在函数下。php我有:

/* Add Menu Locations */
add_action( \'init\', \'register_my_menus\' );
function register_my_menus() {
    register_nav_menus(
        array(
            \'one-menu\' => __(\'menu1\'),
            \'two-menu\' => __(\'menu2\'),
            \'three-menu\' => __(\'menu3\'),
            \'footerBlocka\' => __(\'Footer Block 1\'),
            \'footerBlockb\' => __(\'Footer Block 2\'),
            \'footerBlockc\' => __(\'Footer Block 3\'),
            \'footerBlockd\' => __(\'Footer Block 5\')
        )
    );
}
然后在我的页面模板中,我有:

<?php
    /* Division */
    wp_nav_menu(array(
        \'menu\' => get_post_meta( $post->ID, \'MenuName\', true),
        \'depth\' => 2,
        \'container\' => false,
        \'menu_class\' => \'nav navbar-nav\'
    ));
?>
只要a)菜单存在,b)菜单实际上包含菜单项,这就可以正常工作。如果菜单存在但没有菜单项,它会奇怪地显示站点上所有菜单中所有菜单项的列表。如果菜单不存在,则只显示功能中列出的下一个菜单。php。

因此,我认为在我的页面模板中,我需要检查菜单,如果它存在,则打印菜单。我看到了几个其他的例子,但我能找到的只是主题区域是否存在或菜单是否存在。因为我正在使用\'menu\' => get_post_meta( $post->ID, \'MenuName\', true), 要动态调用菜单,我不知道如何在打印菜单之前检查此动态菜单。

那么如何检查从\'menu\' => get_post_meta( $post->ID, \'MenuName\', true), 如果它存在并且有菜单项,则打印它,如果没有,则不打印?

编辑:我尝试了以下操作:

<?php
    /* Division */
    wp_nav_menu(array(
        \'menu\' => get_post_meta( $post->ID, \'MenuName\', true),
        \'depth\' => 2,
        \'fallback_cb\' => false,
        \'container\' => false,
        \'menu_class\' => \'nav navbar-nav\'
    ));
?>
新添加的内容仍将呈现函数中的下一行菜单。php函数。因此,如果menu3不存在,它将打印footerBlocka菜单。我想我的目标是检查MenuName自定义字段的页面ID,如果它存在,则检查菜单是否存在以及是否有链接,如果为true,则打印菜单,否则什么都不做。类似于:

$menu = get_post_meta($post->ID, \'MenuName\');
if($menu){
  if([wp_nav_menu == $menu AND has links]){
      wp_nav_menu(array(...));
  }
}
这是我认为需要的伪代码,但我对WordPress挂钩了解不够,不知道它需要什么。

2 个回复
最合适的回答,由SO网友:Milo 整理而成

wp_nav_menu 有论点fallback_cb, 如果菜单不存在,则调用该函数。此设置为wp_page_menu 默认情况下,如果菜单不存在,这就是为什么会看到页面列表。如果显式设置为false, 如果菜单不存在,则不会输出任何内容。

编辑-

给定菜单名称,可以使用加载菜单对象wp_get_nav_menu_object. 这将告诉您它是否存在,它的ID是什么(传递为menu 参数),以及它有多少菜单项。

$menu_name = get_post_meta( $post->ID, \'MenuName\', true );
$menu = wp_get_nav_menu_object( $menu_name );
if( is_object( $menu ) ){
    echo \'This menu exists!\';
    echo \'This menu has \' . $menu->count . \' menu items.\';
    echo \'This menu ID is \' . $menu->term_id . \'.\';
} else {
    echo \'A menu with that name doesn\\\'t exist\';
}

SO网友:revive

更简单的方法是只使用:

<?php if(wp_get_nav_menu_items(get_nav_menu_locations()[\'theme_location\'])): ?>
    Do something here IF the menu location you used in the line above has any items
<?php endif; ?>

相关推荐

如何将Java脚本添加到Custom-Page.php模板?

如何将javascript添加到自定义页面。php模板?如何使从w3schools ajax教程获得的以下javascript在自定义页面上工作。php模板?任何帮助都将不胜感激。工作javascript包含在以下HTML中:<!DOCTYPE html> <html> <style> table,th,td { border : 1px solid black; border-collapse: collapse;&#x