即使为WP_NAV_MENU分配了菜单,它也会返回FALSE

时间:2016-12-06 作者:pixeline

我正在开发一个新主题,遇到了一个奇怪的行为。

我已注册页脚菜单:

register_nav_menus([
                \'primary_navigation\' => "Main nav",
                \'footer_navigation\' => "Footer nav"
                ]);
在模板中,primary_navigation 菜单正确显示在管理区域中创建的自定义菜单。

但是footer_navigation 没有。事实上,它返回false:

if (has_nav_menu(\'footer_navigation\')) {
?>
    <ul class="c-footnav__list flex-container" role="navigation">

<?php   

    if(!wp_nav_menu( array( \'theme_location\' => \'footer_navigation\', \'depth\'=>10, \'echo\'=>true ))){

    echo "could not print menu";    
        }; ?>

    </ul>

<?php
 }
它会打印<UL> 元素和“无法打印菜单”消息。

关于wp_nav_menu() 表示:

(object | false | void)如果$echo为false,则菜单输出;如果没有项目或未找到菜单,则为false。

所以我必须假设它没有找到菜单。但为什么has_nav_menu(\'footer_navigation\') 返回true?我错过了什么?

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

原来都是我的错。

我在wp\\u nav\\u menu\\u items挂钩上附加了一个回调函数,如果它不是主菜单,则返回空的。。。就是这样:

// Add logo in main menu

 add_filter( \'wp_nav_menu_items\', \'add_logo_in_main_menu\', 10, 2 );



function add_logo_in_main_menu( $items, $menu ){
    /*
        Append logo to main menu
    */
        if(is_admin() ||  \'primary_navigation\' !== $menu->theme_location){
            return;  //<!--- in this case, returns nothing
        }
        return \'<li class="c-logo--medium"><img src="\'.get_stylesheet_directory_uri().\'/assets/images/logo-pm.jpg" alt=""></li>\'. $items;

    }
修复很简单:

function add_logo_in_main_menu( $items, $menu ){
        /*
        Append logo to main menu
        */
        if(is_admin() ||  \'primary_navigation\' !== $menu->theme_location){
            return $items;
        }
        return \'<li class="c-logo--medium"><img src="\'.get_stylesheet_directory_uri().\'/assets/images/logo-pm.jpg" alt=""></li>\'. $items;

    }
抱歉吵闹了。

相关推荐

用标准的干净文件替换NAV-menus.php文件?

我是一个自学成才的wordpress网站设计师,请原谅我的无知。我为一个客户开发的几个网站最近被一个印尼黑客组织破坏了(很有趣!)。客户端没有更新wordpress安装和其他一些危及安全的事情。遗憾的是,没有网站的清理备份。网络主机给了我一个包含恶意软件扫描结果的文本文件。看起来很多受影响的文件都是导航菜单。网站的php文件。文本文件中显示的扫描结果示例如下:“[主目录]/[网站文件夹名称]/wp includes/nav-menu.php:SL-php-INJECTOR-1-ejw.UNOFFICIAL