привет всем,
я пишу автоматическую функцию, которая генерирует меню из функции. он вызывает 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 существует, он показывает правильный. но если это не так, он просто покажет любое меню! не только раздражает, но и активно нарушает пользовательский опыт.
Попробуйте установить
'fallback_cb' => ''
Я пробовал это, не повезло.
Можете ли вы показать больше своего кода, чтобы мы могли увидеть, что вызывает это? также вы можете попытаться создать функцию-заглушку, которая ничего не делает, и использовать ее в качестве запасного варианта.
конечно, отредактировал выше, чтобы отразить весь цикл… ничего сверхсложного
? Вы имеете в виду
count($items)
? Или вы определилиsize()
функцию в другом месте?Ян, это тест, который я искал! без документов, т. Благодарю.
@yonation: Ну, код тоже документация 🙂
У меня такая же проблема, но я не следую этому ответу. Вы не против поделиться своим кодом?
Это было чрезвычайно полезно — WP продолжал принудительно использовать резервное меню, пока я, наконец, просто не обернул
wp_nav_menu()
вызов в,if ( wp_get_nav_menu_object($id) ) {...}
чтобы свести на нет любой шанс отката — спасибо!привет, чип, спасибо за предложение, но has_nav_menu относится только к расположению меню, а не к слагу/имени. Я не работаю с локациями для этой конкретной темы, поэтому мы вернулись к началу. меня поражает, что нет has_nav_menu_name или что-то в этом роде…
Э, я думаю, вы сделали. Хм… может так и надо
false
, а не'false'
? Вот и хватайся за соломинку.@Chip Bennett Да,
'false'
относится к невозможной функцииfalse()
, а простоfalse
является логическим значением.чип и тощо, спасибо за помощь. я вижу разницу, но и false, и false по-прежнему дают мне меню по умолчанию. я думаю, что проблема заключается в основном включении (я там работал) — резервный вариант используется, если МЕСТОПОЛОЖЕНИЕ не найдено, а не в меню. если меню не найдено, то оно делает все, что, черт возьми, хочет, что является действительно странной реакцией. в основном мне нужно — но не хочу, по очевидному обновлению и другим причинам — редактировать wp-includes/nav-menu-template.php.
Есть ли причина, по которой вы не можете зарегистрировать/использовать
theme_location
для каждого из этих динамических меню?Лично для меня нет причин, хотя а) я вижу в этом дополнительный ненужный шаг и б) я веб-разработчик и пытаюсь думать об этом так, как это сделал бы конечный пользователь; если они хотят создать новое подменю, которое будет автоматически присоединяться к существующим элементам, я хочу, чтобы оно было как можно более динамичным. theme_location делает этот поток невозможным. честно говоря, я не понимаю, почему они не позволяют вам вернуться в меню НЕТ, а не в меню по умолчанию, это кажется большой ошибкой.
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()
.Попробуйте обернуть эхо внутри
has_nav_menu()
условного:(Если я правильно следую вашему коду…)
Из записи Кодекса для wp_nav_menu() :
Так ты пробовал пройти
'fallback_cb' => false
?РЕДАКТИРОВАТЬ:
Согласно приведенному ниже комментарию,
'fallback_cb' => 'false'
предлагаетсяwp_nav_menu()
вернуться к функции с именемfalse()
, и, поскольку эта функция не существует, она возвращается к своему обычному резерву,wp_page_menu()
. Итак, используйте'fallback_cb' => false
(т.е. логическое значение, а не строковое значение).