WP_NAV_MENU在函数.php中可用,但在主题中不起作用

时间:2015-04-21 作者:Jens Törnell

我使用wp_nav_menu 使用此代码functions.php:

register_nav_menus( array(
    \'sidebar_menu\' => \'Sidebar menu\',
    \'topmenu\' => \'topmenu\',
) );

$args = array(
    \'theme_location\' => \'topmenu\'
);
wp_nav_menu( $args );
此代码有效。菜单将显示在主题中的所有内容之前。现在我想在我的header.php 例如,我尝试将代码移到那里:

$args = array(
    \'theme_location\' => \'topmenu\'
);
wp_nav_menu( $args );
我希望代码在这里也能正常工作,但事实并非如此。菜单为空。功能register_nav_menus 仍在functions.php. 这个header.php 正确加载。

The code below returns true in the header.php

if ( has_nav_menu( \'topmenu\' ) ) {
    echo \'true\';
}
为什么菜单显示为空?

1 个回复
最合适的回答,由SO网友:Jens Törnell 整理而成

我有一个pre_get_posts. 我错过的是:

&& $wp_query->is_main_query()
这可以防止pre_get_posts 在菜单上运行查询。

Full code

add_action("pre_get_posts", "custom_front_page");
function custom_front_page( $wp_query ){
    if( is_admin() ) {
        return;
    }

    if( is_front_page() && $wp_query->is_main_query() ) {
        $wp_query->set(\'post_type\', \'produkt\');
        $wp_query->set(\'page_id\', \'\'); 

        $wp_query->is_page = 0;
        $wp_query->is_singular = 0;
        $wp_query->is_post_type_archive = 1;
        $wp_query->is_archive = 1;
    }
}

结束

相关推荐

Global functions on WPMU

我在一个多站点环境中工作,所有站点都是相关的。最近的许多发展都要求我将某些功能复制并粘贴到许多不同的主题文件夹中,如果我需要到处更新它们,就会出现问题。拥有全局“functions.php”文件的最佳方式是什么?我的想法是要么在themes文件夹中包含一个文件并包含它,要么创建一个插件并启用该插件。