Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 20.02.2025)
863580
солдат
370
самолетов
331
вертолетов
10134
танков
21112
ББМ
23410
артиллерия
1078
ПВО
1291
РСЗО
37961
машин
28
корабли и катера
Использование запросов WP_Query в WordPress — часть 3 (основные функции класса)
Опубликовано Обновлено: 15.02.2025

Использование запросов WP_Query в WordPress — часть 3 (основные функции класса)

 

 

Этот урок является продолжением серии о работе с запросами в базу данных WP_Query в ВордПресс. В нем мы сосредоточимся на связанных с запросом функциях, а затем перейдем и к хукам (действия, actions) и фильтрам. Это позволит использовать запросы максимально мощно, и при необходимости расширять дефолтный функционал.

Кроме свойств, методов и параметров (которые мы будем рассматривать спустя некоторое время), при работе с классом WP_Query мы можем также задействовать специальные функции, а также дополнительные хуки и фильтры. И сегодняшний практический урок посвящен именно этим функциям. А в дальнейших уроках разберем хуки и фильтры, связанные с WP_Query.

 

Специальные функции, связанные с классом WP_Query

Давайте подробнее рассмотрим функции WordPress, специально «настроенные» под класс WP_Query. В первой части серии мы уже касательно познакомились с некоторыми из них (query_posts(), get_posts(), get_pages()), а сегодня продолжим и рассмотрим другие важные функции (а также условные тэги) класса.

 

Функция для получения переменных запроса: get_query_var()

Эта функция имеет описательное название, которое говорит само за себя: она берет глобальный объект $wp_query и получает из него общедоступный переменный запрос. Она имеет два параметра: первый – это переменная, возвращающая значение, а второй – значение по умолчанию (если переменная не установлена):

<?php
$page_number = get_query_var( 'paged', 1 );
$category_name = get_query_var( 'category_name' );
$taxonomy_name = get_query_var( 'taxonomy' );
?>

 

Функция для получения отдельной публикации: get_post()

Если ранее рассмотренная функция get_posts() позволяет выполнять запрос и хранить его в виде массива, то родственная функция get_post() позволяет получить только одну публикацию. Эта функция имеет три дополнительных параметра:

  1. идентификатор публикации (по умолчанию идентификатор текущей публикации)
  2. определение типа представления полученного результата: это будет объект (object), ARRAY_A (ассоциативный массив) или ARRAY_N (числовой массив)
  3. нужно ли фильтровать результат. По умолчанию установлено ​​raw (необработано, то есть без фильтрации). Другие значения: edit (редактировать), display (отображать), attribute (атрибут) или js.
<?php
$single_post = get_post( 1, ARRAY_A );
$post_title = $single_post['post_title'];
$post_date = $single_post['post_date'];
?>

Здесь нужно кое-что уточнить. Если вы не знаете, что именно использовать для получения массива публикаций, WP_Query или get_posts(), то в Codex’е есть следующая рекомендация: если вам нужен комплексный запрос (который вернет данные публикации, его метаданные, данные автора и связанные комментарии), тогда вам нужен класс WP_Query, а если вам нужны только основные данные публикации — тогда используйте функцию get_posts(). И, соответственно, при необходимости в одной публикации, тогда вам функция get_post() в помощь. Раньше еще была функция get_page() для получения данных одной страницы, но она уже устарела, вместо этого нужно использовать именно get_post().

 

Функция для проверки, содержит ли запрос результаты: have_posts()

Эта функция просто возвращает TRUE (истина), если в результате запроса есть хотя бы одна публикация, иначе FALSE (ложь). Не принимает никаких параметров. Пример использования:

<?php
if ( have_posts() ) {
 // TRUE
} else {
 // FALSE
}
?>

 

Функция для работы с результирующим циклом запроса: the_post()

Кодекс обозначает эту функцию как «итерирующую индекс публикации в цикле». Но она делает несколько других вещей:

  • устанавливает данные глобальной переменной $post
  • устанавливает значение TRUE для параметра in_the_loop
  • получает следующую запись по запросу
<?php
if ( have_posts() ) {
 while ( have_posts() ) {
 the_post();
 // ...
 }
}
?>

 

Функция для настройки данных глобального $post: setup_postdata()

Эта функция устанавливает глобальные данные публикации, заполняет глобальные переменные $id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages:

<?php
global $post;
setup_postdata($post);
?>

 

Функция для сброса запроса: wp_reset_query()

Используйте эту функцию, если вы изменяли основной запрос (с помощью функции query_posts() или хука pre_get_posts). Пример использования:

<?php
// после того, как основной запрос был изменен
wp_reset_query();
?>

 

Функция для сброса глобальной переменной $post: wp_reset_postdata()

Данная функция возвращает данные глобальной переменной $post к первой публикации в основном запросе. Лучше применять ее, если вы используете последующие после основного запросы. Пример использования:

<?php
// после последующих запросов
wp_reset_postdata();
?>

 

Функция для очистки текущего цикла: rewind_posts()

Функциональность этой функции состоит в том, что она просто «перематывает» (rewinds) цикл, чтобы вы могли запустить его снова позже. Например, так:

<?php
// после цикла
rewind_posts();
?>

 

Функция проверки на «главность» текущего запроса: is_main_query()

Этот условный тег возвращает TRUE (истина), если текущий запрос является основным (главным), и FALSE (ложь) в противном случае:

<?php
if ( is_main_query() ) {
 // основной запрос
} else {
 // второстепенные запросы
}
?>

 

Функция проверки на «нахождение в цикле»: in_the_loop()

Подобным предыдущему тегу является условный тег in_the_loop(), возвращающий TRUE (истина), если ваш код выполняется внутри цикла, или FALSE (ложь) в противном случае:

<?php
if ( in_the_loop() ) {
 // наш код выполняется в цикле
} else {
 // наш код выполняется вне цикла
}
?>

 

Вот и все, тема сегодняшнего урока исчерпана. Вы познакомились с функциями, непосредственно связанными с классом WP_Query! А дальше речь пойдет о хуках и фильтрах.

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Быстрый доступ по сайту SebWeo
Угости меня кофе