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

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

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

—–
Доминикана, благодаря теплому климату, является одним из популярных мест отдыха. Туры в Доминикану привлекательны и тем, что для отдыха в этом замечательном уголке Земли не требуется получение визы.

  1 Мне понравилось!

Koммeнтapии (11):

  1. Спасибо! Нашел, что и искал! А есть альтернативные варианты, не используя регулярные выражения?

  2. И как сделать, что бы меню выводилось вот в таком виде:

    <a href="" rel="nofollow">Контакты</a>

    Заранее спасибо.

  3. Здравствуйте,
    у емня выводится так:

    <?php
    $list_pages = wp_list_pages('sort_column=menu_order&child_of=46&title_li='. __('Заголовок:').'');
    ?>

    Подскажите как изменить стиль ссылки, т.е. “a”, тут он берется из основного, т.е. без стиля. Например мне нужно ссылкам прописать черный цвет. Как это сдлеать?

    т.е. тут , а мне надо

    Заранее благодарю.

  4. Простите не тот код вставил.
    вот так у меня выводится список ссылок:

    <?php wp_list_pages('sort_column=menu_order&child_of=46&title_li='. __('Все монастыри:').'' );
    ?>

  5. У меня скоро от этих непонятных кодов голова лопнет, спасибо, выручили.

  6. Спасибо, полезный код!
    В связи с появлением новой функции wp_nav_manu интерессует вопрос: можно ли сделать такой разделитель для менюшки, которая выводится с помощью wp_nav_manu? Насколько я понимаю, это нужно изменить (расширить) стандарнтый Walker. Но как?

Oтпpaвить кoммeнтapий

Облако тегов