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
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
] );
У меня была такая же проблема, и я пришел к выводу, что это происходит из-за того, что я не создал меню в панели администратора wordpress.
Что вам нужно сделать, это создать меню в панели администратора и использовать это меню, чтобы найти меню, созданное вами в коде.