Функция get_pages() в WordPress предоставляет удобный способ получения страниц из базы данных в виде массива объектов. Она была введена в WordPress версии 1.5.0 и с тех пор значительно улучшена. Эта функция кеширует результаты в объектный кэш, что делает её более эффективной при повторных запросах.
- Шаблон использования
- Пример 1: Страницы с указанным шаблоном
- Пример 2: Показ дочерних страниц
- Пример 3: Показ страниц в выпадающем списке
- Пример 4: Показ страниц с использованием фильтра по метаполю
- Пример 5: Получение страниц с определённым статусом и сортировка по дате
- Пример 6: Вывод страниц с ограничением по числу и пропуском
- Заключение
get_pages() возвращает массив объектов WP_Post, представляющих страницы, и позволяет извлекать данные по различным критериям. Если тип записи не является иерархическим или указаны некорректные параметры, функция может вернуть false. Для «плоских» типов записей рекомендуется использовать функцию get_posts().
Функция get_pages() также служит основой для функций wp_dropdown_pages() и wp_list_pages() и использует WP_Query с версии WordPress 6.3.
get_pages( array $args = array() )
Параметры
Функция принимает массив параметров, позволяющих настраивать запрос. Рассмотрим основные параметры:
post_type(string): Определяет тип записи. По умолчанию'page'. Функция работает только с иерархическими типами записей. Указаниеpost_type = 'post'вернетfalse.post_status(string|array): Статусы страниц для включения в результат. Например:'publish','draft','private'. По умолчанию'publish'.exclude(array|string): ID страниц для исключения из результата. Можно указать через запятую или массив.exclude_tree(int): ID страницы, для которой нужно исключить всю ветку, включая дочерние страницы.include(array|string): ID страниц для включения в результат. Устанавливаетhierarchicalвfalseи отменяет параметрыchild_of,parent,exclude,meta_key,meta_value.child_of(int): ID родительской страницы, дочерние страницы которой нужно получить. Возвращает всю иерархию.parent(int|array): ID родительской страницы. Возвращает только страницы с указанным родителем, без вложенных страниц.hierarchical(bool): Определяет, как выводить страницы. Еслиtrue, страницы выводятся в древовидной структуре с отступами. Еслиfalse, все страницы выводятся в одном уровне.meta_key(string): Выводит страницы, у которых есть указанный ключ метаполя.meta_value(string): Выводит страницы, у которых есть указанное значение метаполя. Используется совместно сmeta_key.authors(string): Выводит страницы, опубликованные указанным автором.number(int): Ограничение по количеству страниц, которые нужно вернуть. Работает в связке сoffset.offset(int): Пропускает указанное количество страниц из начала выборки.sort_column(string): Поле для сортировки страниц. Например:'post_title','post_date'.sort_order(string): Направление сортировки. Допустимые значения:'ASC'(по возрастанию) и'DESC'(по убыванию).'author'/'post_author': Сортировка по автору страницы.'date'/'post_date': Сортировка по дате публикации страницы.'title'/'post_title': Сортировка по заголовку страницы. Это значение по умолчанию и используется для сортировки страниц в алфавитном порядке.'name'/'post_name': Сортировка по «slug» страницы, который является её кратким идентификатором.'modified'/'post_modified': Сортировка по дате последнего изменения страницы.'modified_gmt'/'post_modified_gmt': Сортировка по дате последнего изменения страницы в формате GMT.'menu_order': Сортировка по порядковому номеру в меню. Полезно для страниц с заданным порядком отображения.'parent'/'post_parent': Сортировка по ID родительской страницы. Это может быть полезно для организации иерархии страниц.'ID': Сортировка по уникальному идентификатору страницы.'rand': Случайная сортировка страниц, для получения случайного порядка.'comment_count': Сортировка по количеству комментариев на странице.
Возвращаемое значение
Функция get_pages() возвращает массив объектов WP_Post или false. Массив содержит объекты страниц, соответствующие критериям запроса. Если запрос не возвращает результаты из-за несоответствия типов записи или статусов, функция вернет false.
Шаблон использования
$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();
Пример 1: Страницы с указанным шаблоном
Получение страниц, у которых установлен файл шаблона page-wide.php:
$pages = get_pages([
'meta_key' => '_wp_page_template',
'meta_value' => 'page-wide.php',
'hierarchical' => 0
]);
foreach ($pages as $page) {
echo "$page->post_title <br>";
}
Пример 2: Показ дочерних страниц
Вывод динамического списка дочерних страниц, который можно разместить в конце статьи:
<?php
$custom_pages = get_pages([
'child_of' => $post->ID,
'sort_column' => 'post_date',
'sort_order' => 'desc'
]);
foreach ($custom_pages 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: Показ страниц в выпадающем списке
Создание выпадающего списка со всеми страницами, с использованием функции get_page_link() для получения ссылки на страницу:
<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>
Пример 4: Показ страниц с использованием фильтра по метаполю
Допустим, вы хотите отобразить страницы, у которых установлен определённый мета:
$pages = get_pages([
'meta_key' => 'custom_field_key',
'meta_value' => 'custom_value',
'hierarchical' => false
]);
foreach ($pages as $page) {
echo '<h2><a href="' . get_page_link($page->ID) . '">' . $page->post_title . '</a></h2>';
}
В этом примере meta_key указывает на произвольное поле, а meta_value — на его значение. Страницы, соответствующие этим критериям, будут выведены в виде ссылок.
Пример 5: Получение страниц с определённым статусом и сортировка по дате
Если вы хотите получить все страницы с статусом 'draft', отсортированные по дате создания в убывающем порядке:
$pages = get_pages([
'post_status' => 'draft',
'sort_column' => 'post_date',
'sort_order' => 'desc'
]);
foreach ($pages as $page) {
echo '<h2><a href="' . get_page_link($page->ID) . '">' . $page->post_title . '</a></h2>';
}
Пример 6: Вывод страниц с ограничением по числу и пропуском
Если вы хотите получить только 5 страниц, пропуская первые 3:
$pages = get_pages([
'number' => 5,
'offset' => 3,
'sort_column' => 'post_title'
]);
foreach ($pages as $page) {
echo '<h2><a href="' . get_page_link($page->ID) . '">' . $page->post_title . '</a></h2>';
}
Заключение
Функция get_pages() в WordPress — это инструмент для получения данных о страницах вашего сайта. Она позволяет гибко настраивать выборку страниц в зависимости от ваших потребностей, будь то получение всех страниц, фильтрация по определённым критериям, или отображение страниц в древовидной структуре. С помощью параметров функции можно легко управлять результатами запроса, сортировкой, исключениями и включением определённых страниц.