эй все,
я пишу автоматизированную функцию, которая генерирует меню от функции. это называет wp_nav_menu на каждом объекте от массива, потому что я хочу, чтобы это было динамично. проблема, неважно, как я установил ее, если меню не существует, wp_nav_menu генерирует меню, например, 'значение по умолчанию'. вот мой код (объекты просто ряд строк):
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
обеспечивается и обращается к существующему меню (искавший через 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()
.
Попытайтесь перенести свое эхо в a 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 ():
$fallback_cb (строка) (дополнительно), Если меню не существует, функция нейтрализации для использования. Набор ко лжи ни для какой нейтрализации. Значение по умолчанию: wp_page_menu
Поэтому имейте Вас, пытался передать 'fallback_cb' => false
?
Править:
Согласно комментарию ниже, 'fallback_cb' => 'false'
говорит wp_nav_menu()
к нейтрализации к вызванной функции false()
, и так как эта функция не существует, она отступает к своей нормальной нейтрализации, wp_page_menu()
. Так, используйте 'fallback_cb' => false
(т.е. булево значение, а не строковое значение).
false
, вместо 'false'
? Захват за солому здесь.
– Chip Bennett
31.03.2011, 06:18
'false'
относится к невозможной функции false()
в то время как просто false
булево значение.
– fuxia♦
31.03.2011, 11:08
theme_location
для каждого из этих динамических меню?
– Chip Bennett
31.03.2011, 16:31