Вопрос или проблема
Так как формальным контейнером для пунктов меню является тег <menu>
, как мне заставить WordPress использовать тег <menu>
в качестве обертки для пунктов меню, вместо более общего <ul>
?
Если вы просто пытаетесь заменить <ul...>
и </ul>
на <menu...>
и </menu>
в сгенерированном HTML, вы можете использовать фильтр wp_nav_menu
:
add_filter( 'wp_nav_menu', 'wpse_426932_menu_fix' );
/**
* Исправляет HTML меню, чтобы использовать <menu> вместо <ul>.
*
* @param string $html HTML меню.
* @return string Исправленный HTML меню.
*/
function wpcs_426932_menu_fix( $html ) {
$html = str_replace(
array( '<ul', '</ul>' ),
array( '<menu', '</menu>' ),
$html
);
return $html;
}
Вы можете добавить этот код в файл functions.php
вашей активной темы или вы можете сделать это простым плагином. (Я предпочитаю путь с плагином, потому что так код продолжает работать даже если вы измените тему.)
Примечание: Это очень простая замена строк. Если вам нужно что-то более сложное, возможно, вам понадобится использовать preg_replace()
.
Ответ или решение
Чтобы использовать тег <menu>
в сгенерированных меню WordPress вместо более общего <ul>
, вы можете воспользоваться фильтром wp_nav_menu
. Ниже приведен пошаговый процесс, как это сделать.
Шаг 1: Добавление функции в файл functions.php
Функцию, которая заменяет <ul>
на <menu>
в HTML-коде меню, необходимо добавить в файл functions.php
вашей активной темы, или же вы можете создать простой плагин для этого. Перед тем как вносить изменения, убедитесь, что у вас есть резервная копия вашего сайта.
Вставьте следующий код в functions.php
:
add_filter( 'wp_nav_menu', 'my_custom_menu_tag' );
/**
* Заменяет тег <ul> на <menu> в HTML меню.
*
* @param string $html HTML-код меню.
* @return string Обновленный HTML-код меню.
*/
function my_custom_menu_tag( $html ) {
// Замена <ul> и </ul> на <menu> и </menu>
$html = str_replace(
array( '<ul', '</ul>' ),
array( '<menu', '</menu>' ),
$html
);
return $html;
}
Шаг 2: Использование плагина (по желанию)
Если вы предпочитаете использовать плагин, выполните следующие действия:
- Создайте новую папку в директории
wp-content/plugins/
, назовите ее, например,custom-menu-tag
. - Внутри этой папки создайте файл
custom-menu-tag.php
и вставьте в него следующий код:
<?php
/*
Plugin Name: Custom Menu Tag
Description: Меняет тег <ul> на <menu> в HTML меню.
Version: 1.0
Author: Ваше Имя
*/
add_filter( 'wp_nav_menu', 'my_custom_menu_tag' );
function my_custom_menu_tag( $html ) {
$html = str_replace(
array( '<ul', '</ul>' ),
array( '<menu', '</menu>' ),
$html
);
return $html;
}
- Активируйте плагин в админ-панели WordPress.
Примечание
Обратите внимание, что это простой способ замены строк. Если вам нужно более сложное поведение замены, вы можете использовать функцию preg_replace()
дляRegex сохранения других атрибутов, связанных с <ul>
. Однако для большинства случаев указанного кода будет достаточно.
Теперь, при использовании функции wp_nav_menu()
для отображения меню, WordPress будет генерировать меню с использованием тега <menu>
вместо <ul>
, как вы и планировали.