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. |