damadobling
  • 0
Новичок

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

  • 0

привет всем,

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

Share
  1. Попробуйте установить 'fallback_cb' => ''

    • 0
  2. 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() .

    • 0
  3. Попробуйте обернуть эхо внутри 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;
    
        }
    

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

    • 0
  4. Из записи Кодекса для wp_nav_menu() :

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

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

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

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

    • 0

Оставить ответ

You must login to add an answer.