Произвольный разделитель в списке страниц
Задача: получить список страниц в следующем виде, используя встроенную в WordPress функцию вывода страниц wp_list_pages():
Контакты | О сайте | Карта сайта
В коде это должно выглядеть следующим образом:
<a href="#">Контакты</a> | <a href="#">О сайте</a> | <a href="#">Карта сайта</a>
По умолчанию хтмл-код списка страниц выглядит примерно так:
<li class="page_item page-item-49"><a href="#" title="Контакты">Контакты</a></li> <li class="page_item page-item-78"><a href="#" title="О сайте">О сайте</a></li> <li class="page_item page-item-69"><a href="#" title="Карта сайта">Карта сайта</a></li>
Решение
Содержимое, которое возвращает функция wp_list_pages(), мы с помощью дополнительного параметра echo=0 поместим в переменную, в которой, используя регулярные выражения, сделаем необходимую нам замену тегов. Можно использовать один из нижеприведенных вариантов.
1-й вариант решения
<?php
$list_pages = wp_list_pages('sort_column=menu_order&title_li=&depth=1&echo=0');
$list_pages = preg_replace('/<\/li>[^>]*<li([^>]*)><a/is', ' | <a$1', $list_pages);
$list_pages = preg_replace('/<li([^>]*)>/is', '', $list_pages);
$list_pages = str_replace('</li>', '', $list_pages);
echo $list_pages;
?>
2-й вариант решения
<?php
$list_pages = wp_list_pages('sort_column=menu_order&title_li=&depth=1&echo=0');
$list_pages = preg_replace('#<li\s(.+)>.+(href=".+" title=".+">.+</a>)</li>#siU','<a $1 $2',$list_pages);
preg_match_all('#(<a.+/a>)#siU',$list_pages,$matches);
$list_pages = implode(' | ',$matches[1]);
echo $list_pages;
?>
В результате выполнения этой хитрой замены вышеуказанный список в виде тегов li превратится в такой:
<a class="page_item page-item-49" href="#" title="Контакты">Контакты</a> | <a class="page_item page-item-78" href="#" title="О сайте">О сайте</a> | <a class="page_item page-item-69" href="#" title="Карта сайта">Карта сайта</a>
Получился хтмл-код, которого нам и требовалось добиться.
—–
Доминикана, благодаря теплому климату, является одним из популярных мест отдыха. Туры в Доминикану привлекательны и тем, что для отдыха в этом замечательном уголке Земли не требуется получение визы.
Спасибо! Нашел, что и искал! А есть альтернативные варианты, не используя регулярные выражения?
Есть один альтернативный вариант, но там много кода.
И как сделать, что бы меню выводилось вот в таком виде:
<a href="" rel="nofollow">Контакты</a>Заранее спасибо.
Вместо этой строки:
$list_pages = preg_replace('/<\/li>[^>]*<li([^>]*)><a/is', ' | <a$1', $list_pages);попробуйте такую:
$list_pages = preg_replace('/<\/li>[^>]*<li([^>]*)><a/is', '<a rel="nofollow"$1', $list_pages);Спасибо огромное за код! один вопрос – аттрибут nofollow успешно присваивается всем страницам кроме первой. как можно это исправить?
пример: http://askarina.com/wordpress/affiliate-agreement
(ссылки в футере)
Добавил в статью второй вариант. Попробуйте его.
Здравствуйте,
у емня выводится так:
<?php
$list_pages = wp_list_pages('sort_column=menu_order&child_of=46&title_li='. __('Заголовок:').'');
?>
Подскажите как изменить стиль ссылки, т.е. “a”, тут он берется из основного, т.е. без стиля. Например мне нужно ссылкам прописать черный цвет. Как это сдлеать?
т.е. тут
, а мне надоЗаранее благодарю.
Простите не тот код вставил.
вот так у меня выводится список ссылок:
<?php wp_list_pages('sort_column=menu_order&child_of=46&title_li='. __('Все монастыри:').'' );
?>
У меня скоро от этих непонятных кодов голова лопнет, спасибо, выручили.
Спасибо, полезный код!
В связи с появлением новой функции wp_nav_manu интерессует вопрос: можно ли сделать такой разделитель для менюшки, которая выводится с помощью wp_nav_manu? Насколько я понимаю, это нужно изменить (расширить) стандарнтый Walker. Но как?
Отвечу в виде одного из следующих постов.