web-dev-qa-db-ja.com

wp_nav_menu:メニューが存在する場合にのみメニューを表示し、そうでなくとも何も表示しない

Wp_nav_menuを使用してメニューが存在する場合にのみメニューを表示し、それ以外の場合には何も表示しないようにしています。

メニューを削除すると、ページの一覧が表示されます。

私のfunctions.phpファイルは含まれています:

if (function_exists('register_nav_menus')) {
register_nav_menus (
array('main_nav' => 'Main Navigation Menu'));}

Wp_nav_menuを使用してメニューが存在する場合にのみメニューを表示し、それ以外の場合には何も表示しないようにするにはどうすればよいですか。

9
Ryan

has_nav_menu() を使用し、theme_locationではなくmenu_idをテストします。

<?php
if ( has_nav_menu( $theme_location ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => $theme_location, 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

else句を追加することで、代替コンテンツを出力できます。

_編集_

$theme_locationをあなたのactualtheme_locationに置き換える必要があります。

<?php
if ( has_nav_menu( 'main_nav' ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => 'main_nav', 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>
16
Chip Bennett

fallback_cbwp_nav_menu引数としてfalseを指定するだけです。何も表示されません - むしろ、wp_nav_menuはfalseを返します(何も出力しません)。

<?php
wp_nav_menu(array( 
    'theme_location' => $main_nav, 
    'menu_class'     => 'nav', 
    'container'      => '',
    'fallback_cb'    => false
));
6
chrisguitarguy

場所を指定せずに最初にメニューを登録するだけです。
functions.php内:

add_action( 'init', 'register_my_menus' );
function register_my_menus() {  
    register_nav_menus(
        array(
            'header' => __( 'Header Menu' )
        )
    );
}

header.phpでメニューを呼び出すときは、 has_nav_menu() で確認してください。

if ( has_nav_menu( 'header' ) ) {
    wp_nav_menu( array( 'theme_location' => 'header' ) ); 
}
0
Alex Chen

これを読む:

http://codex.wordpress.org/Function_Reference/wp_nav_menu

set 'fallback_cb' => falseなら何も表示されません、これはwp guysによって提案された標準的な方法です。

0
Hooman Askari