get_pages()
Получает данные страниц (древовидных типов записей) в виде массива объектов. Кэширует результат в объектный кэш.
Полученные данные нужно обрабатывать отдельно через foreach или как-то еще.
Укажите параметр post_type
, чтобы получать данные других типов записей.
Функция работает только с древовидными типами записей! Если указать post_type = post
функция вернет false.
Для получения данных по «плоским» типам записей используйте функцию get_posts().
Используйте wp_list_pages(), чтобы вывести заголовки страниц в древовидном виде.
С версии WP 6.3 использует WP_Query под капотом.
Хуки из функции
Возвращает
WP_Post[]|false
.
- Массив объектов WP_Post.
false
когда:- Указанный тип записи не является иерархическим.
- Указанный статус записи не зарегистрирован, см. get_post_stati().
Шаблон использования
$pages = get_pages( [ 'sort_order' => 'ASC', 'sort_column' => 'post_title', 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'meta_key' => '', 'meta_value' => '', 'authors' => '', 'child_of' => 0, 'parent' => -1, 'exclude_tree' => '', 'number' => '', 'offset' => 0, 'post_type' => 'page', 'post_status' => 'publish', ] ); foreach( $pages as $post ){ setup_postdata( $post ); // формат вывода } wp_reset_postdata();
Использование
$pages = get_pages( $args );
- $args(строка/массив)
- Список аргументов, в соответствии с которыми будет получен результат.
По умолчанию: предустановленные
Аргументы параметра $args
- post_type(string)
- Тип записи с которым будет работать функция.
Default: 'page' - post_status(строка/массив)
- Список статусов страниц, которые должны быть включены в вывод. Указываем через запятую:
'publish,private'
По умолчанию: 'publish' - exclude(строка/массив)
- ID постов которые нужно исключить из выборки. Можно указывать через запятую, пр. exclude='3,7,31' или в массиве.
По умолчанию: array() - exclude_tree(число)
- Параметр противоположный
child_of
, вырезает всю ветку страниц начиная с указанной в этом параметре, вырезает его и все уровни дочерних страниц. В этом параметре указываем ID "верхней" страницы.
По умолчанию: array() - include(строка/массив)
ID постов которые нужно получить, нужно разделять запятыми или пробелами: include='45,63,78,94,128,140'.
Важно: установка этого параметра отменяет параметры:
child_of
,parent
,exclude
,meta_key
,meta_value
и устанавливаетhierarchical = false
.По умолчанию: array()
- child_of(число)
ID страницы, дочернии страницы которой нужно получить. Получит всю иерархию (не только первую вложенность, второй, третий ... n-ный уровень).
Важно: Параметр отменяется если указан параметр
include
.Важно: С этим параметром нельзя использовать параметр
number
, потому что для получения всей иерархии, сначала делается запрос на получения всех страниц указанного типа, а потом из них выбираются подходящие с помощью функции get_page_children( $child_of, $pages ).По умолчанию: 0 (не установлено)
- parent(число/массив)
ID родительской страницы. Можно указать несколько ID в массиве. Получит те страницы, у которых родитель (post_parent) указан в этом параметре.
Важно! Если указан этот параметр, то принудительно устанавливается
hierarchical = false
.Разница с параметром
child_of
в том, что этот параметр возвращает только дочерние страницы, без еще вложенных в них, т.е. возвращает один уровень.По умолчанию: -1 (нет зависимости от родителя)
- hierarchical(логический)
Определяет как выводить страницы:
- true (или 1) - дочерние с отступом от родительской (по умолчанию).
- false (или 0) - выводить все в один ряд.
Важно: принудительно устанавливается
hierarchical = false
, когда указаны любые из параметров:parent
,include
. Делается так, потому что эти параметры взаимоисключающие (если подумать).По умолчанию: true
- meta_key(строка)
- Выведет только те страницы, у которых есть указанный в этом параметре ключ (название произвольного поля).
По умолчанию: '' - meta_value(строка)
- Выведет только те страницы, у которых есть указанное в этом параметре значение произвольного поля. Используется в связке с meta_key.
По умолчанию: '' Выведет страницы опубликованный указанным автором.
Заметка: get_posts() использует параметр
author
вместоauthors
.По умолчанию: ''
- number(число)
Укажите ограничение по количеству выводимых страниц. Укажет в запросе SQL LIMIT. По умолчанию - без ограничений.
Этот параметр нельзя использовать вместе с
child_of
.Заметка: get_posts() использует параметр
numberposts
вместоnumber
.По умолчанию: -1
- offset(число)
- Укажите сколько страниц вы хотели бы пропустить из указанной выборки, т.е. укажем 5 и 5 верхних страниц, которые могли бы быть, будут срезаны. Требует параметр
number
.
По умолчанию: 0 - sort_column(строка)
По какому полю сортироваться страницы. В этом параметре можно использовать любое поле из таблицы wp_posts.
Можно указать несколько полей через запятую:
menu_order, post_title
. Возможные значения:'author' 'post_author' 'date' 'post_date' 'title' 'post_title' 'name' 'post_name' 'modified' 'post_modified' 'modified_gmt' 'post_modified_gmt' 'menu_order' 'parent' 'post_parent' 'ID' 'rand' 'comment_count'
Поля с префиксом
post_
, можно указать без этого префикса, например sort_column = title.По умолчанию: по алфавиту (заголовки страниц)
- sort_order(строка)
В каком направлении упорядочить, указанное в параметре $orderby, поле:
ASC
- По порядку (от меньшего к большему, абвг).DESC
- В обратном порядке (от большего к меньшему, гвба).
Заметка: get_posts() использует параметр order вместо sort_order
По умолчанию: ASC
Примеры
#1 Показ страниц в выпадающем списке
В этом примере мы создадим выпадающий список со всеми страницами. Ссылку на страницу мы получаем функцией get_page_link() в которой предаем ID страницы:
<select name="page-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'> <option value=""><?php echo esc_attr( __( 'Select page' ) ); ?></option> <?php $pages = get_pages(); foreach( $pages as $page ){ echo '<option value="' . get_page_link( $page->ID ) . '">'. esc_html($page->post_title) .'</option>'; } ?> </select>
#2 Показ дочерних страниц
Выведем динамический список дочерних страниц. Если мы расположим его в конце статьи, то у нас получится нечто вроде категорий, где под основным контентом страницы будут идти все дочерние страницы:
<?php $mypages = get_pages( [ 'child_of' => $post->ID, 'sort_column' => 'post_date', 'sort_order' => 'desc' ] ); foreach( $mypages as $page ) { $content = $page->post_content; // пропустим страницу без контента if ( ! $content ) continue; $content = apply_filters( 'the_content', $content ); ?> <h2><a href="<?php echo get_page_link( $page->ID ); ?>"><?php echo $page->post_title; ?></a></h2> <div class="entry"><?php echo $content; ?></div> <?php }
#3 Страницы с указанным шаблоном
Этот пример показывает как получить страницы для который установлен файл шаблона page-tpl.php
. Так как название файла шаблона храниться в метаполе _wp_page_template
, то нам нужно получить все страницы имеющие указанное метаполе.
$pages = get_pages( [ 'meta_key' => '_wp_page_template', 'meta_value' => 'page-tpl.php', 'hierarchical' => 0 ] ); foreach( $pages as $page ){ echo "$page->post_title <br>"; }
Вместо get_pages() можно также использовать get_posts().
Список изменений
С версии 1.5.0 | Введена. |
С версии 6.3.0 | Use WP_Query internally. |