Главная WordPress

Произвольный разделитель в списке страниц WordPress

Задача: получить список страниц в следующем виде, используя встроенную в 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('#<lis(.+)>.+(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>

Получился хтмл-код, которого нам и требовалось добиться.