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. При этом, если присваивать переменной текстовую строку вида 'тест', замена выполняется. В чем проблема, как реализовать задуманное?
Проблема заключается в том, что функция wp_nav_menu выводит меню непосредственно на экран, а не возвращает его в виде строки. Поэтому ваш подход с использованием str_replace не работает.
Вместо этого, вам следует использовать фильтр, который позволяет изменить атрибуты ссылок в меню. Вот пример кода, который можно добавить в файл functions.php вашей темы:
Этот код добавляет фильтр wp_nav_menu, который будет добавлять атрибут nofollow к каждой ссылке в нижнем меню. Теперь вам не нужно будет использовать переменные или str_replace, меню будет выводиться с атрибутом nofollow в нужных местах.
Проблема заключается в том, что функция 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 в нужных местах.
Надеюсь, это поможет вам решить вашу задачу.