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('
Код не работает - выводится просто меню как если бы просто отрабатывала функция wp_nav_menu. При этом, если присваивать переменной текстовую строку вида 'тест', замена выполняется.
В чем проблема, как реализовать задуманное?

21 Авг 2019 в 06:32
261 +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 Апр в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир