web-dev-qa-db-ja.com

wp_nav_menuは常にメニューに戻る

こんにちは、
機能からメニューを生成する自動機能を書いています。私はこれが動的になりたいので、それは配列から各項目にwp_nav_menuを呼び出します。問題は、どのように設定しても、メニューが存在しない場合、wp_nav_menuがメニューを生成していること、例えば 'default'です。これが私のコードです(項目は単なる文字列の集合です)。

for($i=0;$i<count($items);$i++) {

    $themenu=$items[$i];

    $mymenu = wp_nav_menu(array(
            'menu' => $themenu,
            'menu_class' => 'mymenu',
            'container' => 'false',
            'fallback_cb' => 'false',
            'echo' => false
            )
        );  

    echo $themenu;

    }

$ themenuが存在すれば、正しいものが表示されるので、私は部分的に動作していることを知っています。そうでなければ、それはただのメニューを表示するでしょう!迷惑なだけでなく、ユーザーエクスペリエンスを積極的に破壊します。

3
dama_do_bling

wp_nav_menu()は確かにあなたにメニューを提供するために多くのことを試みます、そしてfallback_cbは他に何も働かないときだけ実行されます。 コードから

  • menuが提供されていて既存のメニューを参照している場合(id、slug、nameを受け付ける wp_get_nav_menu_object() で検索される)、これはメニューになります。
  • そうでなければ、theme_locationが登録されたメニュー位置に設定されるならば、これはwp_get_nav_menu_object()に渡されます。
  • そうでなければ、WordPressはアイテムを持っている最初の既存のメニューを検索し、それを使うでしょう。
  • それ以外の場合は、fallback_cbが呼び出されます。デフォルトでは、wp_page_menuはすべてのページのメニューです。

menu引数のみを使用したい場合は、wp_get_nav_menu_object()を呼び出して自分でテストする必要があります。これが何かを返す場合に限り、あなたはwp_nav_menu()を呼ぶべきです。

6
Jan Fabry

エコーをhas_nav_menu()条件式の内側にラップしてみてください。

for($i=0;$i<size($items);$i++) {

    $themenu=$items[$i];

    $mymenu = wp_nav_menu(array(
            'menu' => $themenu,
            'menu_class' => 'mymenu',
            'container' => 'false',
            'fallback_cb' => 'false',
            'echo' => false
            )
        );  

    if ( has_nav_menu( $themenu ) ) echo $themenu;

    }

(私があなたのコードに正しく従っているなら...)

1
Chip Bennett

wp_nav_menu() のCodexエントリから:

$ fallback_cb(文字列)(オプション)メニューが存在しない場合は、使用するフォールバック関数。 フォールバックしない場合はfalseに設定します。デフォルト:wp_page_menu

'fallback_cb' => falseを渡してみましたか?

編集:

以下のコメントのとおり、'fallback_cb' => 'false'wp_nav_menu()false()という名前の関数にフォールバックするよう指示しています。この関数は存在しないため、通常のフォールバックのwp_page_menu()にフォールバックします。そのため、'fallback_cb' => false(つまり、文字列値ではなくブール値値)を使用してください。

1
Chip Bennett