Как сделать так, чтобы WordPress использовал тег для сгенерированных меню?

Вопрос или проблема

Так как формальным контейнером для пунктов меню является тег <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: Использование плагина (по желанию)

Если вы предпочитаете использовать плагин, выполните следующие действия:

  1. Создайте новую папку в директории wp-content/plugins/, назовите ее, например, custom-menu-tag.
  2. Внутри этой папки создайте файл 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;
}
  1. Активируйте плагин в админ-панели WordPress.

Примечание

Обратите внимание, что это простой способ замены строк. Если вам нужно более сложное поведение замены, вы можете использовать функцию preg_replace() дляRegex сохранения других атрибутов, связанных с <ul>. Однако для большинства случаев указанного кода будет достаточно.

Теперь, при использовании функции wp_nav_menu() для отображения меню, WordPress будет генерировать меню с использованием тега <menu> вместо <ul>, как вы и планировали.

Оцените материал
Добавить комментарий

Капча загружается...