Этот урок является продолжением серии о работе с запросами в базу данных WP_Query в ВордПресс. В нем мы сосредоточимся на связанных с запросом функциях, а затем перейдем и к хукам (действия, actions) и фильтрам. Это позволит использовать запросы максимально мощно, и при необходимости расширять дефолтный функционал.
Кроме свойств, методов и параметров (которые мы будем рассматривать спустя некоторое время), при работе с классом 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()
позволяет получить только одну публикацию. Эта функция имеет три дополнительных параметра:
object
), ARRAY_A
(ассоциативный массив) или ARRAY_N
(числовой массив)<?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
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
! А дальше речь пойдет о хуках и фильтрах.
В современном мире цифрового маркетинга Facebook (Meta) остается одной из самых мощных платформ для продвижения…
Этот прибор стал незаменимым элементом арсенала представителей множества профессий, но особенно актуален среди военных. Тепловизор…
Постоянный поток новостей, рабочих задач и личных забот часто приводит к тому, что в голове…
В 2025 году конкуренция в e-commerce стала жесткой как никогда. Клиенты выбирают не только по…
Веб-дизайнеры и разработчики всегда ищут что-то новое и креативное, чтобы сделать свой сайт уникальным и…
Представьте ситуацию, когда вы пытаетесь обновить свой веб-сайт, но по какой-то причине у вас нет…