wp nav menu() неправильно применяет классы и идентификаторы к меню и контейнеру


Я написал этот простой код, чтобы доказать то, что я говорю:

wp_nav_menu( [
    'menu' => 'Primary Navigation',
    'menu_class' => 'this-is-the-menu-class',
    'menu_id' => 'this-is-the-menu-id',
    'container' => 'div',
    'container_class' => 'this-is-the-container-class',
    'container_id' => 'this-is-the-container-ID',
] );

Это вывод:

<div id="this-is-the-menu-id" class="this-is-the-menu-class">
    <ul>
        <li class="page_item page-item-2">
            <a href="http://localhost/test_site/index.php/pagina-di-esempio/">Example Page.</a>
        </li>
    </ul>
</div>

Как вы можете видеть, элемент ul не получает ни класса, ни идентификатора.

Вместо этого они применяются к контейнеру, и классы и идентификатор контейнера, похоже, просто отсутствуют (или получают значения по умолчанию).

В документации сказано, что

  • 'menu_class' (строка) CSS-класс, используемый для ul элемент, который формирует меню. "Меню" по умолчанию.
  • 'идентификатор меню' (строка) Идентификатор, применяемый к элементу ul, который формирует меню. По умолчанию используется увеличенный фрагмент меню.
  • 'контейнер' (строка) Нужно ли заворачивать ul и чем его заворачивать. По умолчанию 'div'.
  • 'класс-контейнер' (строка) Класс, который применяется к контейнеру. По умолчанию "меню-{слизняк меню}-контейнер".
  • 'идентификатор контейнера' (строка) Идентификатор, который применяется к контейнеру.

Но, как вы можете видеть, результат не тот, которого ожидали.

В этом обсуждении пользователь неправильно установил параметр container, и поэтому ответы указывают на эту ошибку, но ошибка все еще существует, и я делаю все в соответствии с правилами (по крайней мере, я думаю!).

Я делаю что-то не так или эффективно функция прослушивается?

Примечания:

  • Я использую фреймворк Genesis (на всякий случай, может быть полезно понять контекст)
  • Версия Wordpress 4.9.4
 3
Author: Aerendir, 2018-03-08

2 answers

Я полагаю, что это, вероятно, вызвано вашей темой или другим плагином, фильтрацией по wp_nav_menu_args и изменением значения items_wrap. Я протестировал предоставленный вами код, и вывод был правильным, используя пустую установку WordPress 4.9.4.

Вы можете попробовать передать items_wrap со значением по умолчанию:

wp_nav_menu( [
    'menu' => 'Primary Navigation',
    'menu_class' => 'this-is-the-menu-class',
    'menu_id' => 'this-is-the-menu-id',
    'container' => 'div',
    'container_class' => 'this-is-the-container-class',
    'container_id' => 'this-is-the-container-ID',
    'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>'
] );

Но если что-то отфильтровывает это, это не будет иметь значения.

Я рекомендую добавить это в вашу дочернюю тему functions.php файл, чтобы удалить все фильтры и посмотреть, будет ли это исправляет это (чтобы доказать, что это фильтр, вызывающий вашу проблему):

remove_all_filters( 'wp_nav_menu_args' );

Вы также можете добавить это в свою дочернюю тему functions.php, чтобы вывести на экран массив $args, где вы можете проверить значение items_wrap:

add_filter( 'pre_wp_nav_menu', 'smyles_dump_nav_menu_args', 9999, 2 );

function smyles_dump_nav_menu_args( $null, $args ){
    ob_start();

    echo '<pre>';
    var_dump($args);
    echo '</pre>';

    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}

Возврат истинного значения (в нашем случае это HTML) в этот фильтр вызовет его эхо на странице, когда echo передается true в wp_nav_menu

Обязательно добавьте echo и установите true в wp_nav_menu вызов:

wp_nav_menu( [
    'menu' => 'Primary Navigation',
    'menu_class' => 'this-is-the-menu-class',
    'menu_id' => 'this-is-the-menu-id',
    'container' => 'div',
    'container_class' => 'this-is-the-container-class',
    'container_id' => 'this-is-the-container-ID',
    'echo' => true
] );
 5
Author: sMyles, 2018-03-08 19:43:46

У меня была такая же проблема, и я пришел к выводу, что это происходит из-за того, что я не создал меню в панели администратора wordpress.

Что вам нужно сделать, это создать меню в панели администратора и использовать это меню, чтобы найти меню, созданное вами в коде.

 0
Author: user173315, 2019-08-10 20:43:32