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


11

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

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

私のfunctions.phpファイルには以下が含まれます:

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

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

回答:


19

次ではなくhas_nav_menu()、を使用してテストします。theme_locationmenu_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はあなたの実際の ものと置き換える必要がありますtheme_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' => '' 
    ) );
}
?>

メニューがない場合は何も出力されません、メニューある場合は残念ながら同じように動作します。他のアイデアは?
ライアン

指定したテーマの場所にメニューを適用しましたか?
チップベネット

いいえ、どうすればよいですか?
ライアン

1
Dashboard -> Appearance -> Menus。カスタムメニューを作成して保存し、ドロップダウンメニューを使用して、指定したテーマの場所に適用します。
チップベネット

ああ、そうしました(スクリーンショット:bit.ly/vrjNf9)。残念ながら、問題は解決しません-メニューが表示されません。PS私の関数ファイルにはこれがあります:if(function_exists( 'register_nav_menus')){register_nav_menus(array( 'main_nav' => 'Main Navigation Menu'));}
Ryan


0

場所を指定せずに、最初にメニューを登録するだけです。
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' ) ); 
}

メニューを登録した場合はせずに、テーマの場所は、後でそれを求めることはできないとのテーマの場所制限。
fuxia

0

これを読む:

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

set 'fallback_cb' => falseと何も表示されません。これはwp guysが提案する標準的な方法です。


これは... chrisguitarguy答えと同じです
brasofilo

私は知っています、私はあなたにワードプレスコーデックスのメイン記事を指摘したかっただけです。
Hooman Askari 2013年

それは本当ではないようです。ドキュメントは言う:theme_locationパラメーターが指定さていない場合、関数はdeveloper.wordpress.org/reference/functions/wp_nav_menu/…menuパラメーターで指定さたID、スラッグ、または名前に一致するメニューを表示します。それ以外の場合は、最初の空でないメニュー。それ以外の場合(またはmenuで指定されたメニューが空の場合)、fallback_cbパラメータで指定された関数の出力(デフォルトではwp_page_menu())。そうでなければ何も。
Alireza
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.