为什么我只在404.php上出现了由wp_NAV_MENU引起的奇怪的渲染问题?

时间:2011-10-27 作者:mcleodm3

我使用WordPress 3中的本机菜单生成器构建了一个导航菜单。这是我用来渲染它的代码:

<?php wp_nav_menu( array(\'menu\' => \'Main Navigation\',\'menu_id\'=> \'headernav\',\'menu_class\'=>\'navigate\')); ?>
它完全按照我在每一页上所期望的方式呈现except 404.php。这就是它在其他地方的渲染方式:

<div class="menu-main-navigation-container"><ul id="headernav" class="navigate">
这就是它在404上的渲染方式。php:

<div class="navigate"><ul>
和404。php它列出了我网站上的每一个页面,而不是我在菜单中内置的页面。

有人知道为什么会这样吗?非常感谢您的帮助。

编辑

这是我函数中的代码。php文件:

function mytheme_setup() {

    register_nav_menus( array(
        \'main-navigation\' => \'Main Navigation\',
        \'subnav-navigation\' => \'Sub menu nav\',
        \'how-eli-works-nav\' => \'How Eli Works\'
    ) );
}
add_action( \'after_setup_theme\', \'mytheme_setup\' );
我也按照你的建议做了,然后回到菜单面板并指定了主题位置。同样的结果:事情在以前的地方运行,404。php仍处于崩溃状态。

这是从我的标题调用菜单的代码。php文件:

<?php wp_nav_menu( array(\'theme_location\' => \'main-navigation\', \'menu\' => \'Main Navigation\',\'menu_id\'=> \'headernav\',\'menu_class\'=>\'navigate\')); ?>
这是我404的代码。php文件:

<?php
get_header(); ?>


    <div id="pagecontent" class="narrowcolumn" role="main">


            <article id="post-0" class="post error404 not-found">
                <header class="entry-header">
                    <h1 class="entry-title"><?php _e( \'Oops, we couldn&rsquo;t find what you requested.\', \'twentyeleven\' ); ?></h1>
                </header>

                <div class="entry-content">
                    <p><?php _e( \'It seems we can&rsquo;t find what you&rsquo;re looking for. Perhaps searching, or one of the links below, can help.\', \'twentyeleven\' ); ?></p>

                    <?php get_search_form(); ?>

                    <?php the_widget( \'WP_Widget_Recent_Posts\', array( \'number\' => 10 ), array( \'widget_id\' => \'404\' ) ); ?>

                    <div class="widget">
                        <h2 class="widgettitle"><?php _e( \'Most Used Categories\', \'twentyeleven\' ); ?></h2>
                        <ul>
                        <?php wp_list_categories( array( \'orderby\' => \'count\', \'order\' => \'DESC\', \'show_count\' => 1, \'title_li\' => \'\', \'number\' => 10 ) ); ?>
                        </ul>
                    </div>

    </div>

<?php get_footer(); ?>

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

这不是一个必然的答案,但经过进一步研究,我发现了以下线索:

http://wordpress.org/support/topic/custom-menu-not-displaying-on-404-error-page

http://www.prettyscripts.com/software/wordpress/wordpress-custom-menu-not-displayed-on-404-page

有一些冲突或错误导致自定义菜单无法在404页上正确呈现。将永久链接更改为不使用任何数字(例如,/%类别%/%postname%/)会导致菜单正确呈现。

希望他们能在即将发布的版本中修复:/

SO网友:Chip Bennett

我不确定这是否会导致你的问题,但有一种方式你肯定Doing It Wrong 正在引用menu 而不是theme_location 在您的呼叫中wp_nav_menu().

假设您已在中将菜单注册为“主导航”functions.php, 例如:

register_nav_menus( array(
    \'main-navigation\' => \'Main Navigation\',
    \'secondary-navigation\' => \'Secondary Navigation\'
) );
。。。然后你的wp_nav_menu() 应引用此注册theme_location:

wp_nav_menu( array(
    \'theme_location\' => \'main-navigation\',
    \'menu_id\'=> \'headernav\',
    \'menu_class\'=>\'navigate\'
) );
错误404模板页面输出nav菜单与任何其他模板没有任何不同的内在原因。如果上述方法无法解决问题,那么我们需要更多地了解您的404.php 标记,以诊断问题。

EDIT

好吧,我试着注册了它,结果是:现在菜单根本没有注册。

你能更新你的答案并发布你的register_nav_menus() 密码

注意:确保此函数调用连接到after_setup_theme; 它通常以theme_setup() 函数,连接到after_setup_theme, 例如:

function mytheme_setup() {

    // Register Nav Menu Locations
    register_nav_menus( array(
        \'main-navigation\' => \'Main Navigation\',
        \'secondary-navigation\' => \'Secondary Navigation\'
    ) );

    // Other Theme-setup functions may go here
}
add_action( \'after_setup_theme\', \'mytheme_setup\' );
所以,在你的答案中张贴代码。

此外,注册主题位置后,您需要转到Dashboard -> Appearance -> Menus, 并确保applied your custom menu to the appropriate Theme Location.

EDIT 2

这是从我的标题调用菜单的代码。php文件:

<?php wp_nav_menu( array(\'theme_location\' => \'main-navigation\', \'menu\' => \'Main Navigation\',\'menu_id\'=> \'headernav\',\'menu_class\'=>\'navigate\')); ?>
You are still passing menu and menu_id parameters to wp_nav_menu().

你为什么这么做?正如我上面所说的,那就是Doing It Wrong. 您只需通过theme_location 参数到wp_nav_menu(). WordPress然后应用通过Dashboard -> Appearance -> Menus

这是我404的代码。php文件:

我不确定它是否相关,但您的HTML标记格式不正确。你有一个空缺<article> 标记,无对应,关闭</article> 标签

结束

相关推荐