こんにちは、
機能からメニューを生成する自動機能を書いています。私はこれが動的になりたいので、それは配列から各項目に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が存在すれば、正しいものが表示されるので、私は部分的に動作していることを知っています。そうでなければ、それはただのメニューを表示するでしょう!迷惑なだけでなく、ユーザーエクスペリエンスを積極的に破壊します。
wp_nav_menu()
は確かにあなたにメニューを提供するために多くのことを試みます、そしてfallback_cb
は他に何も働かないときだけ実行されます。 コードから :
menu
が提供されていて既存のメニューを参照している場合(id、slug、nameを受け付ける wp_get_nav_menu_object()
で検索される)、これはメニューになります。theme_location
が登録されたメニュー位置に設定されるならば、これはwp_get_nav_menu_object()
に渡されます。fallback_cb
が呼び出されます。デフォルトでは、wp_page_menu
はすべてのページのメニューです。menu
引数のみを使用したい場合は、wp_get_nav_menu_object()
を呼び出して自分でテストする必要があります。これが何かを返す場合に限り、あなたはwp_nav_menu()
を呼ぶべきです。
エコーを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;
}
(私があなたのコードに正しく従っているなら...)
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
(つまり、文字列値ではなくブール値値)を使用してください。