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

3
31.03.2011, 16:36
3 ответа

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

  • Если menu обеспечивается и обращается к существующему меню (искавший через 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
19.02.2020, 22:15
  • 1
    , это - тест, который я искал! недокументированный, который является.спасибо. –  dama_do_bling 06.04.2011, 15:32
  • 2
    @yonation: Ну, код является документацией также :-) –  Jan Fabry 06.04.2011, 15:35
  • 3
    , у меня есть та же проблема, но я не следую этому ответу. Вы возражаете совместно использовать свой код? –  Ryan 02.11.2011, 21:22

Попытайтесь перенести свое эхо в 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;

    }

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

1
19.02.2020, 22:15
  • 1
    привет микросхема спасибо за предложение, но has_nav_menu только относится к местоположению меню не, откладывают/называют. я не работаю с местоположениями для этой конкретной темы, таким образом, мы вернулись вначале. это поражает меня нет никакого has_nav_menu_name или чего-то... –  dama_do_bling 31.03.2011, 05:58

От записи Кодекса для wp_nav_menu ():

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

Поэтому имейте Вас, пытался передать 'fallback_cb' => false?

Править:

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

1
19.02.2020, 22:15
  • 1
    Er, я предполагаю, что Вы сделали. Хм..., возможно, это должно быть false, вместо 'false'? Захват за солому здесь. –  Chip Bennett 31.03.2011, 06:18
  • 2
    @Chip Bennett Да, 'false' относится к невозможной функции false() в то время как просто false булево значение. –  fuxia♦ 31.03.2011, 11:08
  • 3
    и toscho, спасибо за справку. я вижу различие, но и ложь и 'ложь' все еще дают мне меню по умолчанию. я думаю, что проблема заключается в ядре, включают (я оснащал вокруг там) - нейтрализация используется, если МЕСТОПОЛОЖЕНИЕ не найдено, не если меню. если меню не найдено, то оно делает то, что ад, который оно хочет, который является действительно странной реакцией. в основном я нуждаюсь к - но не хочу для очевидного обновления, и другие причины - редактируют wp-includes/nav-menu-template.php. –  dama_do_bling 31.03.2011, 16:26
  • 4
    Есть ли причина, что Вы не можете регистрироваться/использовать a theme_location для каждого из этих динамических меню? –  Chip Bennett 31.03.2011, 16:31
  • 5
    никакая причина для меня лично, хотя a) я рассматриваю его как дополнительный ненужный шаг и b) я - сеть dev и пытающийся думать об этом, как конечный пользователь был бы; если бы они хотят создать новое подменю, которое автоматически присоединило бы к существующим элементам, я хочу его максимально динамичный. theme_location делает тот поток невозможным. откровенно я ни за что в жизни не добираюсь, почему они не позволили бы Вам нейтрализация в меню NO, а не значении по умолчанию, походит на большую ошибку. –  dama_do_bling 31.03.2011, 16:38

Теги

Похожие вопросы