Этот урок является продолжением серии о работе с запросами в базу данных 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
! А дальше речь пойдет о хуках и фильтрах.
Этот практический урок будет посвящен рассмотрению аргументов, которые можно использовать для получения публикаций определенных категорий…
Сегодняшний урок практический и служит целью закрепить полученные теоретические знания из предыдущих уроков по запросу…
Продолжаем серию уроков по работе с запросами в базу данных WP_Query в ВордПресс. Сегодняшний урок…
Этим уроком мы продолжаем серию уроков по работе с запросами в базу данных WP_Query в…
В современном цифровом мире вопрос безопасности, анонимности и быстрого доступа к интернет-ресурсам становится все более…