# get_pages()

URL: https://chugunov.pro/api-wordpress/functions/get_pages/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 1.5.0.

## Сигнатура

```php
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`

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

## Связанные

Использует: [`wp_parse_list`](https://chugunov.pro/api-wordpress/functions/wp_parse_list/), [`get_user_by`](https://chugunov.pro/api-wordpress/functions/get_user_by/), `WP_Query::__construct`, [`wp_parse_id_list`](https://chugunov.pro/api-wordpress/functions/wp_parse_id_list/), [`get_page_children`](https://chugunov.pro/api-wordpress/functions/get_page_children/), [`get_post_stati`](https://chugunov.pro/api-wordpress/functions/get_post_stati/), [`wp_parse_args`](https://chugunov.pro/api-wordpress/functions/wp_parse_args/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`get_post_types`](https://chugunov.pro/api-wordpress/functions/get_post_types/).
Используется в: `WP_Customize_Manager::has_published_pages`, `WP_Posts_List_Table::_display_rows_hierarchical`, [`wp_dropdown_pages`](https://chugunov.pro/api-wordpress/functions/wp_dropdown_pages/), [`wp_list_pages`](https://chugunov.pro/api-wordpress/functions/wp_list_pages/), [`get_body_class`](https://chugunov.pro/api-wordpress/functions/get_body_class/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/get_pages/
