Intereting Posts
Вставка терминов таксономии во время активации плагина? Пользовательский тип сообщения – портфолио больше не работает Как мне обойти «Извините, этот тип файла запрещен по соображениям безопасности»? bloginfo () vs get_option? В конкретном блоге тема K2 не имеет текстового виджета Как запрашивать сообщения в одном или другом настраиваемом поле WP API V2 возвращает недопустимый идентификатор пользователя Меню / div года и месяцев сообщений в блоге? Получите таксономию с помощью url без содержимого после короткого кода Как получить идентификатор сообщения на статической странице? Выход из режима перенаправления на текущую страницу – функция Пользовательский шаблон таксономии не отображается Есть ли способ заблокировать некоторые страницы от редактирования кем-либо другим, кроме администратора? Проблемы с параметрами_рекламы и администратора

wp_nav_menu всегда возвращается в меню

всем привет,
Я пишу автоматическую функцию, которая генерирует меню из функции. он вызывает 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, он показывает правильный. но если это не так, оно просто покажет любое меню! не просто раздражает, но и активно нарушает работу пользователя.

Solutions Collecting From Web of "wp_nav_menu всегда возвращается в меню"

wp_nav_menu() действительно много пытается предоставить вам меню, а fallback_cb выполняется только тогда, когда ничего не работает. Из кода :

  • Если menu предоставлено и относится к существующему меню (просматривается через wp_get_nav_menu_object() , который принимает идентификатор, slug или имя), это будет меню
  • В противном случае, если для параметра theme_location установлено зарегистрированное местоположение в меню, оно будет передано в wp_get_nav_menu_object()
  • В противном случае WordPress будет искать первое существующее меню с элементами и использовать его
  • В противном случае вызывается 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; } 

(Если я правильно следую вашему коду …)

Из записи Codex для wp_nav_menu () :

$ fallback_cb (строка) (необязательно) Если меню не существует, используется функция резервного копирования. Установите значение false для отсутствия возврата. По умолчанию: wp_page_menu

Так вы пробовали передать 'fallback_cb' => false ?

РЕДАКТИРОВАТЬ:

В соответствии с комментарием ниже 'fallback_cb' => 'false' сообщает wp_nav_menu() о wp_nav_menu() функции с именем false() , и поскольку эта функция не существует, она возвращается к ее нормальному резервному wp_page_menu() , wp_page_menu() . Таким образом, используйте 'fallback_cb' => false (т.е. значение типа boolean , а не строковое значение).