WordPress. Как передать переменной результат функции wp_nav_menu? Здравствуйте.
На сайте есть дубль меню, находится в подвале. В целях внутренней оптимизации решено ссылкам из него не передавать вес.
Задача: ссылкам из нижнего меню добавить атрибут nofollow.
Меню выводится так: 'footer', // название меню
'container' => 'div', // контейнер для меню, по умолчанию 'div', в нашем случае ставим 'nav', пустая строка - нет контейнера
'container_class' => 'menu_footer_bold', // класс для контейнера
'container_id' => '', // id для контейнера
'menu_class' => 'ul_a', // класс для меню
'menu_id' => '', // id для меню
));?>
Пробовал решить следующим образом: создаем переменную, ей присваиваем результат wp_nav_menu , затем обрабатываем её функцией str_replace и выводим на страницу. Вот код: 'footer', // название меню
'container' => 'div', // контейнер для меню, по умолчанию 'div', в нашем случае ставим 'nav', пустая строка - нет контейнера
'container_class' => 'menu_footer_bold', // класс для контейнера
'container_id' => '', // id для контейнера
'menu_class' => 'ul_a', // класс для меню
'menu_id' => '', // id для меню
));
$nav = str_replace('<a ', '
Код не работает - выводится просто меню как если бы просто отрабатывала функция wp_nav_menu. При этом, если присваивать переменной текстовую строку вида 'тест', замена выполняется.
В чем проблема, как реализовать задуманное?

21 Авг 2019 в 06:32
286 +1
0
Ответы
1

Проблема заключается в том, что функция wp_nav_menu выводит меню непосредственно на экран, а не возвращает его в виде строки. Поэтому ваш подход с использованием str_replace не работает.

Вместо этого, вам следует использовать фильтр, который позволяет изменить атрибуты ссылок в меню. Вот пример кода, который можно добавить в файл functions.php вашей темы:

function add_nofollow_footer_menu( $menu ){
return preg_replace('/<a /', '<a rel="nofollow"', $menu);
}
add_filter( 'wp_nav_menu', 'add_nofollow_footer_menu' );

Этот код добавляет фильтр wp_nav_menu, который будет добавлять атрибут nofollow к каждой ссылке в нижнем меню. Теперь вам не нужно будет использовать переменные или str_replace, меню будет выводиться с атрибутом nofollow в нужных местах.

Надеюсь, это поможет вам решить вашу задачу.

20 Апр 2024 в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир