基于类别页面的不同菜单

时间:2011-06-05 作者:Louis Stephens

我试图使用内置的Wordpress菜单编辑器,根据您所在的“页面”类别设置不同的菜单。

在我的头文件中,我设置了:

<?php
    if (is_home()) {
    $menu = \'home\';}

    elseif($post->post_name=\'category-aviation\'){
    $menu = \'aviation\';}



    elseif($post->post_name=\'category-anti-terrorism\'){
    $menu = \'anti-terrorism\';}
        elseif($post->post_name=\'asbestos\'){
    $menu = \'asbestos\';}
        elseif($post->post_name=\'burn-pits\'){
    $menu = \'burn-pits\';}
        elseif($post->post_name=\'catastropic-injury\'){
    $menu = \'catastrophic-injury\';}
        elseif($post->post_name=\'medical\'){
    $menu = \'medical\';}

        elseif($post->post_name=\'securities\'){
    $menu = \'securities\';}

    //get_category_by_slug(\'aviation\')
    ?>
我把菜单叫做:

<?php wp_nav_menu( array(  \'theme_location\'  => "$menu" , \'sort_column\' => \'menu_order\', \'container_class\' => \'menu-header\' ) ); ?>
我设置了功能。包含以下内容的php文件:

function show_posts_nav() {
    global $wp_query;
    return ($wp_query->max_num_pages > 1);
add_action( \'init\', \'register_my_menus\' );

}

if ( function_exists( \'register_nav_menus\' ) ) {
    register_nav_menus(
        array(
          \'home\' => \'The Home Menu\',
          \'aviation\' => \'Aviation\',
          \'anti-terrorism\' => \'Anti-Terrorism\',
          \'asbestos\' => \'Asbestos\',
          \'burn-pits\' => \'Burn Pits\',
          \'catastrophic-injury\' => \'Catastrophic .Injury\',
          \'medical\' => \'Medical\',
          \'securities\' => \'Securities\'




        )
    );
}
但是,没有显示任何菜单。我是不是做错了什么?我知道当我在航空页面上时,body class设置为“class=“archive category category aviation category-5 logged in admin bar”。

1 个回复
SO网友:kaiser

在我看来,概述您的概念时,您需要执行以下操作:

检查是否有多个页面($GLOBALS[\'wp_query\']->max_num_pages > 1)TRUE, 添加导航菜单该概念在某些方面失败(答案末尾有更多解释):

如果有多个页面,你问得太早了。(您的想法真的是仅当您位于分页存档的第2页时才显示这些菜单?)$post->post_name 如果没有a)从全局获取数据b)在循环之外,c)从错误的全局获取数据,那么您的生活将更加轻松functions.php 文件您可以添加如下菜单:

function wpse19269_add_nav_menus()
{
    add_theme_support( \'menus\' );

    $nav_menus = array(
         \'home\'          => \'The Home Menu\',
         \'aviation\'      => \'Aviation\',
         \'anti-terrorism\'    => \'Anti-Terrorism\',
         \'asbestos\'      => \'Asbestos\',
         \'burn-pits\'         => \'Burn Pits\',
         \'catastrophic-injury\'   => \'Catastrophic Injury\',
         \'medical\'       => \'Medical\',
         \'securities\'        => \'Securities\'
    );
    register_nav_menus( $nav_menus );
}
add_action( \'init\', \'wpse19269_add_nav_menus\', 20 );
如果您使用functions.php 文件,您可以编写自己的自定义函数,避免将主题文件弄乱:

function wpse19269_show_nav_menus()
{
    $menu = \'\'; // Set a value to avoid errors if no condition is met
    if ( is_home() )
    {
        $menu = \'home\';
    }
    elseif( is_category(\'some_category\') )
    {
        $menu = \'whatever\';
    }
    elseif
    {
        // and so on...
    }

    // Nav Menu
    wp_nav_menu( array( 
         \'theme-location\'   => $location
        ,\'menu\'         => \'top-nav\'
        ,\'menu_id\'      => \'top-nav\'
        ,\'container\'        =>  false
        ,\'container_class\'  => \'menu-header\' 
    ) );
}
// Use it in your theme like this:
// wpse19269_show_nav_menus();
看完你的片段后,我想最好解释一下一些基本的事情:

如果要访问global 可获得的$variables, 你得先叫他们global $whatever 在函数中使用它之前。

Example:

function the_example()
{
    global $post; // Now we have the global data available in the function
    echo $post->post_title; // This is the post title - must be used inside the loop
}
你可以阅读here 更多信息。

与挂钩中的数据交互请查看Plugin API/Action Reference 查看时间$wp_query 已准备就绪并可用。你在init 钩子太早了。

条件标记使用其他Conditional Tags, 喜欢is_category(\'see codex link for more information\');.

关于代码的其他注意事项:

wp_nav_menu( array( \'theme_location\' => "$menu" ... 应在没有".

WordPress功能无需质疑if ( function_exists(\'some_native_wp_fn\') ) {, 因为它会存在。如果不再存在,你会得到depracated 请注意,这会告诉您有关它的信息。如果您对存在的问题提出质疑,您将取消通知,并且无法修复它(或者很难找到它)。

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph