web-dev-qa-db-ja.com

異なるカテゴリページに異なるカスタムメニューを表示する

サイドバーに一連のメニューを表示するためにin_category関数を使用しています。ただし、もっと良い方法は、このメニューをナビゲーションメニューとしてカスタムメニューの形式で上部に表示することです。

質問:

私はすでにカスタムメニューを持っていますが、読者が特定のカテゴリからの投稿を訪れたときはいつでもこのカスタムメニューを別のメニューに置き換えることができる方法はありますか?

例:

ホームページでは、これはメニューです:

ホーム|猫犬

CATカテゴリでタグ付けされた投稿では、これはメニューです:

ホーム|猫1猫2

私の理解では、これが現在のコードです。

if ( function_exists('wp_nav_menu') ) {
add_theme_support( 'nav-menus' );
register_nav_menus( array( 'primary-menu' => __( 'Primary Menu', 'woothemes' ) )    );
register_nav_menus( array( 'top-menu' => __( 'Top Menu', 'woothemes' ) ) );
}

そして...

<?php
if ( function_exists( 'has_nav_menu' ) && has_nav_menu( 'primary-menu' ) ) {
    echo '<h3>' . woo_get_menu_name( 'primary-menu' ) . '</h3>';
    wp_nav_menu( array( 'sort_column' => 'menu_order', 'container' => 'ul', 'menu_id' => 'main-nav', 'menu_class' => 'nav fl', 'theme_location' => 'primary-menu' ) );
} else {
?>
    <ul id="main-nav" class="nav fl">
        <?php
        if ( get_option( 'woo_custom_nav_menu' ) == 'true' ) {
            if ( function_exists( 'woo_custom_navigation_output' ) ) { woo_custom_navigation_output( 'name=Woo Menu 1' ); }
        } else { ?>

            <?php if ( is_page() ) { $highlight = 'page_item'; } else { $highlight = 'page_item current_page_item'; } ?>
            <li class="<?php echo esc_attr( $highlight ); ?>"><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php _e( 'Home', 'woothemes' ); ?></a></li>
            <?php wp_list_pages( 'sort_column=menu_order&depth=6&title_li=&exclude=' ); ?>
        <?php } ?>
    </ul><!-- /#nav -->
<?php } ?>
</section><!-- /.menus -->
1
Sid

Category-menuという新しいメニューを追加します。

if( function_exists( 'wp_nav_menu' ) ) 
{
    add_theme_support( 'nav-menus' );

    register_nav_menus( array( 
        'primary-menu' => __( 'Primary Menu', 'woothemes' ) 
    ));

    register_nav_menus( array( 
        'top-menu' => __( 'Top Menu', 'woothemes' ) 
    ));

    register_nav_menus( array( 
        'category-menu' => __( 'Category Menu', 'woothemes' ) 
    ));
}

そしてそれを条件付き is_category() で出力します。

if( function_exists( 'has_nav_menu' ) && has_nav_menu( 'primary-menu' ) ) 
{
    // On category 'Cheese'
    if( is_category( 'Cheese' ) )
    {
        echo '<h3>' . woo_get_menu_name( 'category-menu' ) . '</h3>';

        wp_nav_menu( array( 
            'sort_column'    => 'menu_order', 
            'container'      => 'ul', 
            'menu_id'        => 'main-nav', 
            'menu_class'     => 'nav fl', 
            'theme_location' => 'category-menu' 
        ));
    }
    else
    {
        echo '<h3>' . woo_get_menu_name( 'primary-menu' ) . '</h3>';

        wp_nav_menu( array( 
            'sort_column'    => 'menu_order', 
            'container'      => 'ul', 
            'menu_id'        => 'main-nav', 
            'menu_class'     => 'nav fl', 
            'theme_location' => 'primary-menu' 
        ));
    }
}
2