Использование запросов 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! А дальше речь пойдет о хуках и фильтрах.

 

Recent Posts

Использование запросов WP_Query в WordPress — часть 7 (аргументы для получения категорий, тегов)

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

2 часа ago

Использование запросов WP_Query в WordPress – часть 6 (аргументы для получения постов, страниц)

Сегодняшний урок практический и служит целью закрепить полученные теоретические знания из предыдущих уроков по запросу…

1 день ago

Использование запросов WP_Query в WordPress – часть 5 (методы и свойства)

Продолжаем серию уроков по работе с запросами в базу данных WP_Query в ВордПресс. Сегодняшний урок…

4 дня ago

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

Этим уроком мы продолжаем серию уроков по работе с запросами в базу данных WP_Query в…

5 дней ago

Прокси: основы, виды и преимущества использования

В современном цифровом мире вопрос безопасности, анонимности и быстрого доступа к интернет-ресурсам становится все более…

1 неделя ago

Джеки Чан

Твоя ужасная работа — мечта каждого безработного. Твой непослушный ребенок — мечта каждого бездетного. Твой…

1 неделя ago