# WP_Query: Рекомендуемый способ получения записей в WordPress
WP_Query — это класс в WordPress, который позволяет извлекать записи из базы данных на основе заданных параметров. Он используется в большинстве функций для выборки записей, таких как get_posts() и query_posts().
## Введение в WP_Query
WP_Query необходим для работы с записями в WordPress. Например, он позволяет извлекать записи:
- за определённый период времени;
- из заданной категории или с определенными тегами;
- новые или популярные записи;
- записи с определенными пользовательскими полями.
Во время создания стандартного цикла в WordPress данные берутся из глобальной переменной $wp_query, которая также хранит информацию о текущей странице. Без использования WP_Query невозможно создать базовую страницу WordPress.
### Пример простого запроса
```php
$query = new WP_Query( [ 'category_name' => 'news' ] );
Этот запрос извлекает записи из категории "новости".
Теперь переменная $query содержит объект с результатами запроса. Давайте обработаем результаты:
while ( $query->have_posts() ) {
$query->the_post();
the_title(); // выводим заголовок записи
}
wp_reset_postdata(); // Важно: восстанавливаем глобальную переменную $post
Параметры WP_Query
Основные параметры запроса
post_type: тип записей, напримерpost,page.posts_per_page: количество записей на странице.orderby: поле для сортировки (например, по дате или заголовку).order: направление сортировки (ASCилиDESC).post_status: статус записей (например,publishдля опубликованных).offset: количество записей, которые нужно пропустить.
Пример более сложного запроса
$args = [
'posts_per_page' => 5,
'orderby' => 'comment_count',
'order' => 'DESC',
'post_status' => 'publish',
];
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
echo '';
while ( $query->have_posts() ) {
$query->the_post();
echo '- ' . esc_html( get_the_title() ) . '
';
}
echo '
';
} else {
// Если записей не найдено
echo 'Записи не найдены.
';
}
// Восстановить оригинальные данные $post
wp_reset_postdata();
Как избежать вмешательства в глобальную переменную $post
Если вам не нужно использовать стандартные функции, работающие с глобальной переменной $post, вы можете использовать метод next_post():
while ( $query->have_posts() ) {
$my_post = $query->next_post();
$url = get_permalink( $my_post );
}
Использование get_posts()
get_posts() позволяет получать записи с использованием параметров, как и в WP_Query, но в более простом виде. Пример:
$args = [
'post_type' => 'page',
];
$my_posts = get_posts( $args );
foreach ( $my_posts as $my_post ) {
echo '' . esc_html( $my_post->post_title ) . '
';
}
Заключение
WP_Query — это мощный инструмент для работы с записями в WordPress, который позволяет формировать запросы к базе данных с помощью множества параметров. Понимание его работы улучшит ваши возможности в создании динамических и адаптивных сайтов на WordPress.