Как использовать класс WP_Query в WordPress?

Опубликовано: 2024-08-09

Оглавление
Что такое WP_Query?
Краткая заметка о WP_Query
Как вы можете использовать WP_Query?
WP_Query против query_posts(): какой из них предпочтительнее?
Некоторые примеры использования WP_Query
Заключение

Что такое WP_Query?

WP_Query — это мощный класс PHP в WordPress, который позволяет создавать собственные запросы к набору данных для получения сообщений и другого контента и их отображения на странице. Он обеспечивает гибкий и эффективный способ взаимодействия с базой данных и получения контента на основе различных критериев.


Краткая заметка о WP_Query

Возможно, вы знали, что WordPress хранит все данные вашего сайта, такие как записи, страницы, комментарии или настройки, в базе данных MySQL.

Таким образом, для любого, кто посещает ваш веб-сайт, запрос немедленно отправляется в эту базу данных, получая запрошенные данные, будь то сообщения или страницы, для отображения на вашем экране.

Но вы, наверное, удивитесь, узнав, что с помощью WP_Query вы можете создавать запросы, которые помогут вам получить конкретную информацию из вашей базы данных. Поэтому всякий раз, когда кто-то ищет ваш контент, WordPress использует этот встроенный класс.

Без сомнения, вы все равно можете использовать SQL для написания всех этих запросов, но это довольно сложный и не самый простой способ сделать это. С другой стороны, WP_Query намного проще.

WP_Query настолько полезен, что вы можете создавать собственные запросы для отображения определенного контента на вашем веб-сайте, при этом посетителю не придется его искать.

Короче говоря, WP_Query — это инструмент, который позволяет разработчикам контролировать, какой контент отображается на сайтах WordPress и как он выглядит, без необходимости писать сложный код.

Предположим, вы создаете в WordPress особый тип контента, называемый «блог». Чтобы показать эти публикации «блога» на вашем сайте, вы можете написать специальный запрос с помощью WP_Query.

// WP QUERY
$query = new WP_Query([
'post_type' => 'blog', // Type of content
'posts_per_page' => 6, // Number of posts to show
'category_name' => 'Entertainment' // Category filter
]);

Теперь для отображения запрошенного запроса WP_Query предоставляет ярлыки и встроенные функции, которые помогут вам настроить цикл. Цикл — это фрагмент PHP-кода, который WordPress использует для отображения сообщений на странице.

WordPress обрабатывает и форматирует каждое сообщение в соответствии с критериями, которые вы установили в WP_Query (например, тип сообщения, количество сообщений и категория).

Этот мощный инструмент помогает разработчикам легко настроить отображение контента в темах WordPress без необходимости писать сложные запросы к базе данных.


WPOven Dedicated Hosting

Как вы можете использовать WP_Query?

Теперь вы знаете, что такое WP_Query и что именно он делает. Давайте рассмотрим различные сценарии использования этого мощного инструмента.

1. Создайте цикл в WP_Query.

Во-первых, вы должны понять, что такое Loop. Это часть WordPress, которая очень быстро извлекает данные из данных и отображает их на вашем веб-сайте. В основном он фокусируется на принятии решения о том, как будет выглядеть ваш контент, на основе шаблонов вашей темы.

Что цикл может показать на веб-сайте?

В зависимости от выбранных вами настроек в цикле может отображаться:

  • Пользовательские типы сообщений и пользовательские поля
  • Размещайте заголовки и краткие описания на главной странице.
  • Содержимое и комментарии одного поста
  • Содержимое отдельных страниц с использованием тегов шаблона

Для вашего лучшего понимания ниже приведена простая структура цикла.

Пример базового цикла

<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Display post content
endwhile;
endif;
?>

  • Здесь функция have_posts() проверяет, есть ли доступные публикации.
  • while ( have_posts() ) : the_post(); : если есть сообщения, этот цикл будет выполняться для каждого сообщения и отображать его содержимое.

Настройка цикла с помощью WP_Query

Иногда вы не хотите отображать все свои сообщения. Вы можете использовать WP_Query для настройки отображаемого содержимого:

<?php
// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// No posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

Как работает этот пользовательский цикл

  • Настройка запроса : $the_query = new WP_Query( $args ); создает собственный запрос на основе заданных вами параметров (например, типа сообщения, категории и т. д.).
  • Запуск цикла : if ( $the_query->have_posts() ) { ... } проверяет, есть ли сообщения, соответствующие вашему запросу. Если они есть, он отображает заголовок каждого сообщения в списке.
  • Сброс данных публикации : wp_reset_postdata(); гарантирует, что исходные данные записи будут восстановлены после запуска пользовательского цикла.

Параметры настройки

С WP_Query вы можете:

  • Показать сообщения из определенной категории, автора или диапазона дат.
  • Отображение сообщений с определенными тегами или настраиваемыми полями.

2. Аргументы WP_Query

Если вы хотите получать определенные сообщения со своего сайта WordPress, вам необходимо создать WP_Query, и для этого вам необходимо включить четыре основных части:

  • Аргумент запроса : сообщает WordPress, какие данные следует получить.
  • Запрос : использует аргумент для получения данных.
  • Цикл : обрабатывает и отображает каждое сообщение.
  • Post Data Reset : Сбрасывает данные после выполнения цикла.

Но одним из наиболее важных компонентов WP_Query является аргумент (часто называемый WP_Query args), который отвечает за извлечение конкретного сообщения, которое вы хотите получить из базы данных.

Это настолько важно, что вместо показа всех сообщений аргумент устанавливает условия для отображения только определенных сообщений.

Пример аргумента

  • Строка $args : здесь вы включаете аргумент запроса.
  • Структура : вы помещаете определенные параметры в массив. Вот простой пример:

$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);

Конкретный пример

Если вы хотите отображать сообщения с тегом «Ошибки WordPress», вам следует настроить аргумент запроса следующим образом:

$query = new WP_Query( array( 'tag' => 'WordPress Errors' ) );

Почему аргумент важен

  • Нет аргументов, нет контента : если вы не включите аргумент WP_Query, WordPress не будет знать, какие сообщения отображать. Ваш запрос не получит никакого контента из базы данных.

3. Установите параметры WP_query

Параметры — это то, что делает WP_Query полезным и мощным. Благодаря их разнообразию каждый может легко отфильтровать результаты поиска в базе данных.

Например, если вы хотите отображать определенные публикации на своем сайте WordPress, вы используете WP_Query и, чтобы убедиться, что вы получаете правильную публикацию, вы можете установить параметры. У вас может возникнуть еще один вопрос: «Каковы параметры?»

Что ж, параметры — это инструкции, которые сообщают WordPress, какие сообщения следует получать из базы данных.

Примеры общих параметров

Вот некоторые общие параметры, которые вы можете использовать:

  • cat : отображает сообщения из определенных категорий.
  • автор : показывает сообщения одного или нескольких конкретных авторов.
  • post_status : показывает сообщения, которые находятся в стадии обработки, запланированы, опубликованы или удалены.
  • orderby : сортирует сообщения по автору, типу сообщения, дате и т. д.
  • Posts_per_page : устанавливает количество отображаемых сообщений.
  • тег : показывает сообщения с определенными тегами.
  • order : сортирует сообщения по возрастанию или убыванию.
  • post_type : определяет, показывать ли сообщения, страницы или пользовательские типы сообщений.

Как использовать параметры

Если вы хотите отображать сообщения из определенной категории, вы можете использовать параметр category_name . Вот пример:

$query = new WP_Query( array( 'category_name' => 'WordPress' ) );

Будут показаны все сообщения в категории «Персонал» и любых подкатегориях.

Более сложный пример

В этом примере мы демонстрируем, как вы можете использовать несколько значений в разных аргументах для создания сложного и настраиваемого запроса для получения именно тех сообщений, которые вам нужны.

Мы будем получать сообщения, которые относятся к определенным категориям, имеют определенные теги, написаны конкретными авторами и отсортированы по дате в порядке убывания.

$args = array(
'category__in' => array(5, 10), // Categories with IDs 5 and 10
'tag__in' => array('featured', 'popular'), // Posts tagged with 'featured' or 'popular'
'author__in' => array(1, 2), // Authors with IDs 1 and 2
'orderby' => 'date', // Order by date
'order' => 'DESC', // In descending order
'posts_per_page' => 10 // Limit to 10 posts
);

$query = new WP_Query($args);

// The Loop
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Display post content
the_title('<h2>', '</h2>');
the_excerpt();
}
} else {
// No posts found
echo 'No posts found';
}

// Restore original Post Data
wp_reset_postdata();

  • Category__in : помогает указать, что нам нужны публикации из категорий с идентификаторами 5 и 10.
  • tag__in : указывает, что мы хотим, чтобы публикации были помечены как «избранные», так и «популярные».
  • author__in : указывает, что нам нужны публикации авторов с идентификаторами 1 и 2.
  • orderby : указывает, что мы хотим упорядочить сообщения по дате их публикации.
  • order : указывает, что мы хотим, чтобы сообщения располагались в порядке убывания (самые новые первыми).
  • Posts_per_page : ограничивает количество получаемых сообщений до 10.

4. Измените объекты с помощью методов и свойств класса.

В WordPress WP_Query — это специальный класс PHP, используемый для получения сообщений из базы данных. Думайте об этом как об инструменте, который поможет вам получать именно те сообщения, которые вы хотите показывать на своем веб-сайте.

Что такое свойства и методы класса?

В PHP класс может иметь свойства (например, переменные) и методы (например, функции). Вот простой способ их понять:

  • Свойства : они похожи на контейнеры, содержащие информацию. В контексте WP_Query свойства могут включать в себя такие вещи, как список сообщений или количество найденных сообщений.
  • Методы : это инструменты или действия, которые вы можете выполнить. В WP_Query методы могут помочь вам проверить наличие сообщений, получить заголовок сообщения или сбросить запрос.

Можете ли вы изменить свойства напрямую?

Нет, вы не можете изменять свойства напрямую, даже разработчики также крайне не рекомендуют это делать, но вы можете использовать методы в качестве альтернативы.

Методы — это официальные инструменты или команды, которые помогают вам идти по правильному пути. Это именно то, что работает как функции: когда вы вносите определенные изменения в методы WP_Query, вы также можете настроить извлекаемые данные.

Пример использования методов в WP_Query

В этом примере функция reset_postdata() может стать важным шагом при написании вашего WP_Query. Этот метод сбросит свойства $current_post и $post.

<?php
// Create a new query with specific arguments
$the_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 5,
'category_name' => 'news',
));
?>

<?php if ($the_query->have_posts()) : ?>
<!-- Display the posts -->
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<p><?php the_excerpt(); ?></p>
<?php endwhile; ?>
<!-- Reset the post data to avoid conflicts -->
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>

Авария:
  • Создание запроса :
    • $the_query = new WP_Query($args); : он создает новый объект WP_Query с предоставленными вами аргументами.
  • Проверка сообщений :
    • if ($the_query->have_posts()) : проверяет, есть ли какие-либо сообщения для отображения на основе вашего запроса.
  • Циклическое перебор сообщений :
    • while ($the_query->have_posts()) : $the_query->the_post(); : он настраивает данные публикации, чтобы вы могли их отображать.
  • Отображение сообщений :
    • the_title(); и the_excerpt(); : отображает заголовок и отрывок текущего сообщения.
  • Сброс данных публикации :
    • wp_reset_postdata(); : он сбрасывает глобальные данные публикации в запись основного запроса. Это важно, чтобы не испортить другие части вашей страницы.

Распространенные методы, которые вы можете использовать

Вот некоторые распространенные методы WP_Query , которые вы можете использовать для работы с вашим запросом:

  • get_posts :
    • Что он делает : Получает список сообщений.
    • Пример : phpКопировать код $posts = get_posts(array('category' => 'news'));
  • have_posts :
    • Что он делает : проверяет, есть ли сообщения для отображения.
    • Пример : код phpCopy if ($the_query->have_posts()) { // There are posts to show }
  • the_post :
    • Что он делает : устанавливает текущие данные публикации.
    • Пример : phpСкопируйте код $the_query->the_post();
  • fill_query_vars :
    • Что он делает : дополняет недостающие детали запроса.
    • Пример : phpСкопируйте код $the_query->fill_query_vars($args);

Предоставляя WP_Query нужную информацию, вы можете настроить его для выполнения различных задач. Этот метод представляет собой гибкий и безопасный способ настройки свойств класса.


WP_Query против query_posts(): какой из них предпочтительнее?

Ниже приведена подробная таблица сравнения WP_Query и query_posts() в WordPress, включая некоторые основные моменты, которые помогут вам понять, почему WP_Query обычно предпочтительнее query_posts() :

Особенность WP_Query query_posts()
Цель Создавайте собственные запросы для получения сообщений из базы данных. Измените основной запрос на странице (не рекомендуется для общего использования).
Основное использование Идеально подходит для создания новых запросов и отображения сообщений в индивидуальном порядке. Обычно используется для изменения основного запроса, но не рекомендуется.
Рекомендуемое использование Да, это рекомендуемый способ получения и отображения сообщений. Нет, лучше избегать использования этой функции внутри основного цикла, плагинов и тем.
Влияние на основной запрос Не влияет на основной запрос. Вы можете запускать собственные запросы без изменения основного цикла. Полностью переопределяет основной запрос, что может вызвать конфликты или неожиданные результаты.
Сброс данных публикации Используйте wp_reset_postdata() , чтобы восстановить исходный запрос после выполнения пользовательского запроса. Нет эквивалентной функции, а это означает, что вам, возможно, придется вручную восстановить данные публикации основного запроса.
Обработка нескольких запросов Может обрабатывать несколько запросов и предназначен для сложных сценариев. Обрабатывает только один запрос и изменяет основной запрос, что может быть проблематично для нескольких запросов.
Влияние на производительность Как правило, это лучше с точки зрения производительности, поскольку не меняет основной запрос. Может быть менее эффективным и вызывать проблемы из-за влияния на основной запрос.
Примеры пользовательских запросов $custom_query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 5)); query_posts(array('post_type' => 'post', 'posts_per_page' => 5));
Пример сброса данных <?php wp_reset_postdata(); ?> Нет функции сброса, требуется ручной сброс, если в основной запрос внесены изменения.
Простота использования Простота в использовании благодаря встроенным методам и функциям для запроса сообщений и страниц. Менее прост и может привести к проблемам, если не использовать его осторожно.
WP_Query против query_posts()

WPOven Dedicated Hosting

Некоторые примеры использования WP_Query

Чтобы лучше понять WP_Query и его практическое использование, ознакомьтесь с некоторыми примерами, приведенными ниже:

1. Показать последние публикации, опубликованные на этой неделе.

Если у вас хорошая база пользователей или приличный объем веб-трафика, это означает, что вашим посетителям нравится ваш контент и они захотят прочитать последние статьи, опубликованные на вашем сайте.

При разработке своего веб-сайта вы можете размещать последние публикации в специальном разделе веб-страницы. К счастью, с помощью WP_Query вы можете легко находить сообщения по параметрам даты. Давайте посмотрим, как это сделать.

<?php
$arguments = array(
"date_query" => array(
array(
"year" => date( "Y" ),
"week" => date( "W" ),
)
)
);
$posts = new WP_Query($arguments);
?>

В этом примере мы создаем WP_Query для поиска сообщений, опубликованных на текущей неделе. Мы используем специальную часть WP_Query, называемую date_query , для указания критериев поиска.

Основной целью запроса был поиск публикаций, опубликованных за текущую неделю. Для этого мы использовали параметр date_query для поиска сообщений по датам. Он принимает массив аргументов, связанных с датой.

Таким образом, когда вы настраиваете параметр date_query , вы можете получать и отображать недавно опубликованные сообщения. Однако вы также можете указать собственные значения, чтобы сделать запрос более эффективным и выделить последние статьи, написанные за последнюю неделю.


2. Показать последнее сообщение в определенной категории.

Посетители вашего веб-сайта могут часто искать новейшую информацию, и для увеличения вовлеченности и количества просмотров страниц рекомендуется предлагать еще несколько похожих публикаций, которые им могут понравиться.

Хотя существует множество способов связать связанные записи в WordPress, WP_Query — один из эффективных способов сделать это. Особенно отличный способ для веб-сайта, на котором всегда публикуется актуальный контент.

Например, если кто-то читает статью об ошибках WordPress, WP_Query может помочь показать другие похожие и недавние статьи.

Итак, если вы хотите получить последние сообщения в определенной категории, используйте этот WP_query и внесите небольшие изменения, включающие информацию о вашем сайте:

<?php

// Get the current post id.
$current_post_id = get_the_ID();

// Get the current post's category (first one if there's more than one).
$current_post_cats = get_the_category();
$current_post_first_cat_id = $current_post_cats[ 0 ]->term_id;

// Setup arguments.
$args = array(
// Get category's posts.
'cat' => $current_post_first_cat_id,
// Exclude current post.
'post__not_in' => array( $current_post_id )
);

// Instantiate new query instance.
$my_query = new WP_Query( $args );

?>


3. Показать посты того же автора и в той же категории.

Вполне возможно, что если посетителю нравится ваш контент, ему могут понравиться взгляды автора, стиль письма и восприятие.

Для этого вы можете использовать WP_Query, чтобы предлагать вашим читателям похожие сообщения, написанные тем же автором. Запрос будет искать сообщения, написанные тем же автором и в той же категории, что и текущее сообщение.

Для этого нам нужно создать специальную строку WP_Query, которая будет искать сообщения с похожими авторами и той же категорией.

Вот код:

<?php
$arguments = array(
"author_name" => "Rahul",
"category_name" => "WordPress",
"posts_per_page" => 3,
);
$posts = new WP_Query($arguments);
?>

В приведенном выше коде вам необходимо заменить «Рахул» на имя автора и «WordPress» на имя категории.


4. Покажите свои самые популярные публикации.

Точно так же, как последние или последние сообщения, которые вы отображали для своих читателей. вы также можете показывать сообщения на темы, которые нравятся вашим читателям и которые их часто интересуют. Для этого вы можете использовать параметр orderby и передать его в аргумент comment_count .

<?php
$arguments = array(
"category_name" => "WordPress Errors",
"orderby" => "comment_count",
"posts_per_page" => 5,
);
$posts = new WP_Query($arguments);
?>

Приведенный выше WP_Query будет искать сообщения в категории «Ошибки WordPress» и фильтровать результаты по количеству комментариев к каждому сообщению.

В выводе будут отображены пять публикаций с наибольшим количеством комментариев в порядке убывания слева направо, начиная с публикации с самым высоким уровнем вовлеченности и заканчивая самым низким.


Заключение

Теперь вы стали свидетелями того, насколько мощным является WP_Query и как он упрощает выполнение запросов к базе данных в WordPress. Кроме того, вы сможете гибко настраивать свой сайт и предоставлять посетителям уникальные возможности.

Чтобы использовать WP_Query, вы можете:

  • Создайте цикл: отображайте свои сообщения.
  • Используйте аргументы запроса: настройте поиск.
  • Установите конкретные параметры: отфильтруйте результаты.
  • Изменить свойства класса: настроить результаты запроса с помощью методов.

Если вы освоили все эти методы, вы сможете легко рекомендовать конкретные публикации на основе различных факторов, таких как популярность и дата.

Этот метод помогает повысить вовлеченность пользователей, улучшить пользовательский опыт, а также помочь вашим постоянным посетителям найти более релевантный контент.

Если у вас все еще есть сомнения относительно WP_Query или вы хотите добавить больше фрагментов контента, которые мы могли пропустить. Пожалуйста, дайте нам знать в разделе комментариев ниже.