функция
since 1.5.0
get_pages()
Проверено на WordPress 6.9, обновлено Источник: WordPress Developer Resources.
Сигнатура
get_pages( array|string $args = array() ): WP_Post[]|false
Описание
Возвращает массив страниц (или элементов иерархического типа записи).
Параметры
$args
array|string
необязательный
= array()
Массив или строка аргументов для получения страниц.
child_of intID страницы, дочерние и внучатые страницы которой нужно вернуть. Примечание: значение $hierarchical не влияет на то, возвращает ли $child_of иерархические результаты. Значение по умолчанию 0, или без ограничений.
sort_order stringКак сортировать полученные страницы. Принимает 'ASC', 'DESC'. Значение по умолчанию 'ASC'.
sort_column stringПо каким столбцам сортировать страницы, через запятую. Принимает 'post_author', 'post_date', 'post_title', 'post_name', 'post_modified', 'menu_order', 'post_modified_gmt', 'post_parent', 'ID', 'rand', 'comment*count'.
'post*' можно опустить для любых значений, начинающихся с него.
Значение по умолчанию 'post_title'.
hierarchical boolВозвращать ли страницы иерархически. Если false и при этом $child_of тоже false, оба аргумента игнорируются.
Значение по умолчанию true.
exclude int[]Массив ID страниц для исключения.
include int[]Массив ID страниц для включения. Нельзя использовать с $child_of, $parent, $exclude, $meta_key, $meta_value или $hierarchical.
meta_key stringВключать только страницы с этим ключом метаданных.
meta_value stringВключать только страницы с этим значением метаданных. Требует $meta_key.
authors stringСписок ID авторов через запятую.
parent intID страницы, прямых потомков которой нужно вернуть. Значение по умолчанию -1, или без ограничений.
exclude_tree string|int[]Строка через запятую или массив ID страниц для исключения.
number intКоличество возвращаемых страниц. Значение по умолчанию 0, или все страницы.
offset intКоличество страниц, пропускаемых перед возвратом. Требует $number.
Значение по умолчанию 0.
post_type stringТип записи для запроса. Значение по умолчанию 'page'.
post_status string|arrayСписок через запятую или массив статусов записей для включения.
Значение по умолчанию 'publish'.
Возвращаемое значение
WP_Post[]|false
Исходный код
wp-includes/post.php:6412
function get_pages( $args = array() ) {
$defaults = array(
'child_of' => 0,
'sort_order' => 'ASC',
'sort_column' => 'post_title',
'hierarchical' => 1,
'exclude' => array(),
'include' => array(),
'meta_key' => '',
'meta_value' => '',
'authors' => '',
'parent' => -1,
'exclude_tree' => array(),
'number' => '',
'offset' => 0,
'post_type' => 'page',
'post_status' => 'publish',
);
$parsed_args = wp_parse_args( $args, $defaults );
$number = (int) $parsed_args['number'];
$offset = (int) $parsed_args['offset'];
$child_of = (int) $parsed_args['child_of'];
$hierarchical = $parsed_args['hierarchical'];
$exclude = $parsed_args['exclude'];
$meta_key = $parsed_args['meta_key'];
$meta_value = $parsed_args['meta_value'];
$parent = $parsed_args['parent'];
$post_status = $parsed_args['post_status'];
// Make sure the post type is hierarchical.
$hierarchical_post_types = get_post_types( array( 'hierarchical' => true ) );
if ( ! in_array( $parsed_args['post_type'], $hierarchical_post_types, true ) ) {
return false;
}
if ( $parent > 0 && ! $child_of ) {
$hierarchical = false;
}
// Make sure we have a valid post status.
if ( ! is_array( $post_status ) ) {
$post_status = explode( ',', $post_status );
}
if ( array_diff( $post_status, get_post_stati() ) ) {
return false;
}
$query_args = array(
'orderby' => 'post_title',
'order' => 'ASC',
'post__not_in' => wp_parse_id_list( $exclude ),
'meta_key' => $meta_key,
'meta_value' => $meta_value,
'posts_per_page' => -1,
'offset' => $offset,
'post_type' => $parsed_args['post_type'],
'post_status' => $post_status,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
'ignore_sticky_posts' => true,
'no_found_rows' => true,
);
if ( ! empty( $parsed_args['include'] ) ) {
$child_of = 0; // Ignore child_of, parent, exclude, meta_key, and meta_value params if using include.
$parent = -1;
unset( $query_args['post__not_in'], $query_args['meta_key'], $query_args['meta_value'] );
$hierarchical = false;
$query_args['post__in'] = wp_parse_id_list( $parsed_args['include'] );
}
if ( ! empty( $parsed_args['authors'] ) ) {
$post_authors = wp_parse_list( $parsed_args['authors'] );
if ( ! empty( $post_authors ) ) {
$query_args['author__in'] = array();
foreach ( $post_authors as $post_author ) {
// Do we have an author id or an author login?
if ( 0 === (int) $post_author ) {
$post_author = get_user_by( 'login', $post_author );
if ( empty( $post_author ) ) {
continue;
}
if ( empty( $post_author->ID ) ) {
continue;
}
$post_author = $post_author->ID;
}
$query_args['author__in'][] = (int) $post_author;
}
}
}
if ( is_array( $parent ) ) {
$post_parent__in = array_map( 'absint', (array) $parent );
if ( ! empty( $post_parent__in ) ) {
$query_args['post_parent__in'] = $post_parent__in;
}
} elseif ( $parent >= 0 ) {
$query_args['post_parent'] = $parent;
}
/*
* Maintain backward compatibility for `sort_column` key.
* Additionally to `WP_Query`, it has been supporting the `post_modified_gmt` field, so this logic will translate
* it to `post_modified` which should result in the same order given the two dates in the fields match.
*/
$orderby = wp_parse_list( $parsed_args['sort_column'] );
$orderby = array_map(
static function ( $orderby_field ) {
$orderby_field = trim( $orderby_field );
if ( 'post_modified_gmt' === $orderby_field || 'modified_gmt' === $orderby_field ) {
$orderby_field = str_replace( '_gmt', '', $orderby_field );
}
return $orderby_field;
},
$orderby
);
if ( $orderby ) {
$query_args['orderby'] = array_fill_keys( $orderby, $parsed_args['sort_order'] );
}
$order = $parsed_args['sort_order'];
if ( $order ) {
$query_args['order'] = $order;
}
if ( ! empty( $number ) ) {
$query_args['posts_per_page'] = $number;
}
/**
* Filters query arguments passed to WP_Query in get_pages().
*
* @since 6.3.0
*
* @param array $query_args Array of arguments passed to WP_Query.
* @param array $parsed_args Array of get_pages() arguments.
*/
$query_args = apply_filters( 'get_pages_query_args', $query_args, $parsed_args );
$pages = new WP_Query();
$pages = $pages->query( $query_args );
if ( $child_of || $hierarchical ) {
$pages = get_page_children( $child_of, $pages );
}
if ( ! empty( $parsed_args['exclude_tree'] ) ) {
$exclude = wp_parse_id_list( $parsed_args['exclude_tree'] );
foreach ( $exclude as $id ) {
$children = get_page_children( $id, $pages );
foreach ( $children as $child ) {
$exclude[] = $child->ID;
}
}
$num_pages = count( $pages );
for ( $i = 0; $i < $num_pages; $i++ ) {
if ( in_array( $pages[ $i ]->ID, $exclude, true ) ) {
unset( $pages[ $i ] );
}
}
}
/**
* Filters the retrieved list of pages.
*
* @since 2.1.0
*
* @param WP_Post[] $pages Array of page objects.
* @param array $parsed_args Array of get_pages() arguments.
*/
return apply_filters( 'get_pages', $pages, $parsed_args );
}
История изменений
| Версия | Описание |
|---|---|
| 6.3.0 | Use WP_Query internally. |
| 1.5.0 | Introduced. |

