wp_list_pages() — выводит список страниц
Выводит список страниц WordPress в виде ссылок на них. Часто используется в темах в шапке и в сайдбаре.
wp_list_pages($args = '')
- $args
- (массив) Список значений параметра $args по умолчанию:
$args = array(
'authors' => '', // все авторы
'child_of' => 0, // и родительские и дочерние страницы
'date_format' => get_option('date_format'),
'depth' => 0, // любой уровень вложенности
'echo' => 1, // вывести результат
'exclude' => '', // ничего не исключать
'include' => '', // не выводить какие-либо конкретные страницы
'link_after' => '', // ничего не добавлять перед ссылкой
'link_before' => '', // ничего не добавлять после ссылки
'post_type' => 'page', // тип поста - только страницы
'post_status' => 'publish', // статус - только опубликованные
'show_date' => '', // не указывать дату
'sort_column' => 'menu_order, post_title', // сорировать по порядку, а затем по заголовку
'sort_order' => '', // порядок сортировки - по возрастанию
'title_li' => __('Pages'), // заголовок списка - Страницы
);
- authors
- (строка) Укажите через запятую ID авторов, страницы, опубликованные которыми, нужно вывести.
<ul>
<?php wp_list_pages( 'authors=1,15' ) ?>
</ul>
- child_of
- (целое число) Выводит дочерние страницы, находящихся на всех уровнях вложенности, для страницы с указанным ID.
<ul>
<?php wp_list_pages( 'child_of=15' ) ?>
</ul>
- show_date
- (строка) Нужно ли отобразить дату публикации или изменения страницы:
modified
— выводить дату изменения,
created
(либо любое другое значение, отличное от пустой строки) — отображать дату публикации;
- date_format
- (строка) Формат даты (зависит от предыдущего параметра). Пример:
<ul>
<?php
$args = array(
'show_date' => 'modified',
'date_format' => 'j M Y'
);
wp_list_pages( $args );
?>
</ul>
- sort_column
- (строка) По какому параметру сортировать выводимые ссылки на страницы:
post_title
— по заголовку страниц,
menu_order
— по порядку (устанавливается в админке при редактировании страниц),
post_date
— по дате создания,
post_modified
— по дате последнего изменения,
ID
— по ID,
post_author
— по ID автора,
post_name
— по ярлыку страниц;
- sort_order
- (строка) Порядок сортировки:
ASC
— по возврастанию (по умолчанию),
DESC
— по убыванию;
Сортируем по заголовку в обратном алфавитном порядке:
<ul>
<?php wp_list_pages( 'sort_column=post_title&sort_order=DESC' ) ?>
</ul>
- exclude
- (строка) Укажите через запятую ID страниц, которые нужно исключить из списка.
- exclude_tree
- (строка) Укажите через запятую ID родительских страниц, которые нужно исключить из списка вместе с их дочерними страницами.
- include
- (строка) Если вам нужно включить только какие-то конкретные страницы в выводимый список, укажите их IDы через запятую, используя этот параметр.
- depth
- (целое число) Параметр позволяет задать максимальный уровень вложенности выводимых страниц:
- 0 — любой уровень вложенности, страницы выводятся с учетом иерархии,
- -1 — любой уровень вложенности, но без учета иерархии,
- 1 — только страницы с нулевым уровнем вложенности,
- 2, 3, … — укажите максимальный уровень вложенности страниц.
- title_li
- (строка) Заголовок списка. Если указать
null
или пустое значение, заголовок не будет добавлен, а список не будет заключен в тег <ul>
.
Например в этих случаях заголовка не будет:
<ul>
<?php wp_list_pages('title_li='); ?>
</ul>
<ul>
<?php wp_list_pages('exclude=1,3,7&title_li='); ?>
</ul>
- echo
- (логическое) Что в итоге нужно сделать с полученным результатом:
- 1 (true) — вывести,
- 0 (false) — возвратить.
<?php
$children53 = wp_list_pages('title_li=&child_of=53&echo=0');
if ($children53) { ?>
<ul>
<?php echo $children53; ?>
</ul>
<?php } ?>
- meta_key
- (строка) Название произвольного поля (используется в совокупности с параметром meta_value).
- meta_value
- (строка) Значение произвольного поля (используется в совокупности с параметром meta_key).
<ul>
<?php wp_list_pages( 'meta_key=color&meta_value=white' ) ?>
</ul>
- link_before
- (строка) Текст или код HTML, который нужно добавить перед анкором ссылки внутри тега
<a>
.
- link_after
- (строка) Текст или код HTML, который нужно добавить после анкора ссылки внутри тега
<a>
.
- number
- (целое число) Количество ссылок на страниц, которое нужно вывести (по умолчанию — все).
- offset
- (целое число) Количество страниц с начала списка, которые нужно пропустить.
- post_type
- (строка) Вы можете выводить не только страницы, но и другие типы постов с иерархией.
Например выведем работы из портфолио:
$args = array(
'post_type'=> 'portfolio',
'title_li'=> 'Портфолио'
);
wp_list_pages( $args );
- post_status
- (строка) Страницы с какими статусами следует включить в список. Например, опубликованные или черновики. Список всех статусов здесь. Можно указать несколько статусов через запятую.
Список изменений:
- 2.7 : Добавлены параметры
link_before
, link_after
и exclude_tree
.
- 2.8 : Добавлены параметры
number
и offset
.
Миша
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.
Пишите, если нужна помощь с сайтом или разработка с нуля.
Здравствуйте!
У меня на Главной странице адаптивного сайта предусмотрены 4 колонки на одной строке. В каждой колонке надо вывести название страницы, картинку к ней, описание-анонс и ссылку на полный вариант страницы. Как этого достичь с помощью чистого Html Css понятно. Но, может быть, правильнее использовать возможности самого движка? Данная функция может реализовать такой функционал или лучше использовать чистый код Html или текстовый виджет?
Первый раз сам создаю тему. В голове пока каша.
Добрый день!
Думаю вам поможет эта статья. Если вы планируете серьёзно заниматься созданием темы, вам просто необходимо её прочитать и освоить.
Большое спасибо за ответ.
Вариант использования WP_Query я тоже рассматривал. Ваша статья-подробнейшее изложение, которое я встречал по этой теме. Жаль, раньше не нашел Ваш сайт.
Использовал для достижения цели такой код:
И он даже вывел именно то, что мне нужно. В этом случае возникает вопрос иерархии.
Я вывожу эти страницы на Главной. В настройках Чтение установлена статическая страница. Для вывода Главной использую специальный файл page-template-home. В этом файле я и прописываю код вторичного цикла. Смущает то, что в исходном коде сайтов, которые я просматриваю в учебных целях, в коде Главной присутствуют:
т.е в качестве домашней установлена какая-то статическая страница
и
Вот эта строка-обертка всей страницы и вызывает вопрос. post class можно использовать только внутри цикла.
Если страница простенькая, то текст страницы вносится через админку и вопросов нет. В файле шаблона главной прописываем дефолтный цикл и всей странице будет присвоен этот класс с помощью post class в цикле, а сам текст выведет the content внутри цикла.
Но, если весь контент страницы предполагается выводить с помощью вторичных циклов в файле-шаблоне страницы, то как всей странице присвоить этот класс? Получается, что я должен в шаблоне главной все-таки прописать дефолтный цикл, а уже внутри него с помощью вторичных циклов и выводить весь нужный мне контент. Т.е будет такой код в шаблоне Главной:
Можно вкладывать один цикл внутрь другого или я слишком наворотил?
Сам по себе этот класс-обертка мне не особо нужен( я могу прописать свой прямо в шаблоне страницы), но раз он используется повсеместно, значит, я недопонимаю иерархическую структуру. И, возможно, вообще неправильно организовываю контент в своей теме.
2 неделю не могу найти ответ на этот вопрос. Уже перелопатил кучу статей про циклы, про порядок загрузки файлов. Но ответ так и не нашел. Пожалуйста, подскажите, где я неправ.
На самом деле решение вашей проблемы очень простое — если для создания вторичных циклов вы будете использовать WP_Query, то, после завершения цикла вам надо добавить функцию wp_reset_postdata().
Если я описал недостаточно подробно, пожалуйста, спрашивайте, буду рад вам помочь :)
Я читал про эту функцию и использую ее в конце каждого цикла. Но не был уверен, является ли она гарантом возврата правильных данных в переменную $post, если один цикл вложен внутрь другого. Вложенности циклов я не встретил ни в одном примере в сети.
Миша, подскажите, а вообще нормально городить такой код или все-таки лучше избегать вложенности циклов? На практике такая схема часто используется или лучше пересмотреть структуру контента?
Можно еще каким-то способом получить этот класс обертку? Я кроме описанного выше другого способа не вижу,но это не значит, что его нет. Я только учусь.
Можно получить массив классов при помощи функции
get_post_class( $class, $post_id )
Функцию нашел только в оригинальном англоязычном Кодексе. Видимо, она нечасто используется. Но возьму на заметку. Спасибо.
Вложить циклы друг в друга для меня на данном этапе проще. Тем более, как я понял, вкладывать можно не только new WP Query, но и get posts внутрь дефолтного цикла. Главное- не забывать про wp_reset_postdata().
У меня последний вопрос по этой теме. В каком случае лучше использовать цикл WP Query, а в каком get posts? get posts вроде предназначен только для сортировки стандартных постов и страниц. У меня как раз такой случай. Но мне больше нравится WP Query. Есть какие -то правила использования или рекомендации по этим двум циклам? Может быть скорость загрузки страниц при использовании get posts выше?
Если хотите делать много циклов один в другом — используйте get_posts(), во всех остальных случаях — WP_Query.
Еще раз спасибо за терпение и потраченное время. Вы мне здорово помогли. Утащил сайт в закладки.
Привет, Миша!
Можешь ли подсказать?
Задача у меня вывести список родственных страниц через запятую, текущую вывести без ссылки. Состряпала Walker для функции wp_list_pages().
Никак не соображу как их разделять запятыми? Последний элемент тоже выводится с запятой..
Ну да)), сама же и отвечу.. вдруг кому понадобится ответ нашла тут https://wordpress.org/support/topic/how-can-i-get-wp_list_pages-separated-by-commas
Привет!
спс)
Привет, Миш.
Я так и лечу сайт после попытки обновления движка (((.. После восстановления из бекапа файлов и базы даже небольшая посещаемость дает непомерную нагрузку. Поставила плаг Query Monitor, чтобы разобраться в причинах.
Заодно выяснила, что wp_list_pages() жутко медленный. Он перебирает ВСЕ страницы (а их около 1500) и сравнивает с заданными параметрами (совпадение id родителя).
Чем посоветуешь его заменить?
Сейчас код такой
Привет!
Так замени на WP_Query?)
да, с get_post переписала)