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

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

 

 

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

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

  1. аргументы для запроса (параметры которых являются темой сегодняшнего урока)
  2. непосредственно сам запрос
  3. работа с циклом
  4. закрытие цикла (условных тегов if и while); сброс данных публикации (глобального $post)

 

На практике это будет выглядеть примерно так:

<?php
$args = array(
  // массив аргументов запроса
);
// образец пользовательского запроса
// создание нового экземпляра класса – нового объекта
$query = new WP_Query( $args );
// проверка на наличие результатов запроса
if ( $query->have_posts() ) {
 // прохождение циклом по результатам запроса
 while ( $query->have_posts() ) {
   $query->the_post();
   // здесь контент публикации результата
   }
}
// обязательное восстановление (сброс) оригинальных данных публикации после запроса
// перезагрузка глобальной переменной $post
wp_reset_postdata();
?>

 

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

<?php
$args = array(
  // массив аргументов запроса
);
// ...
?>

 

Использование аргументов в запросе

Аргументы для запроса указываются в массиве. Схематически их указание может выглядеть следующим образом:

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

Параметры и их значения берутся в одинарные (или двойные) кавычки, между ними указывается знак =>, а разделяются от других запятыми. Если в этом допустить ошибку, тогда движок WordPress может не правильно обработать ваш запрос или даже привести к «белому экрану смерти».

 

Запрос, который вернет отдельную публикацию (типа пост)

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

  1. Использовать идентификатор публикации: p (int)
  2. Использовать слаг (часть URL) поста: name (string) (! это не заголовок поста)

 

Эти два параметра можно использовать для получения любых типов публикаций, включая посты, страницы, вложения и специальные типы публикаций (CPTcustom post type). По умолчанию WordPress отправляет запрос на тип публикации post, но это решается дополнительным аргументом, как вы увидите дальше.

Итак, чтобы вернуть конкретную публикацию, вы можете построить запрос следующим образом:

<?php
$args = array(
  'p' => 125 // ID поста
);
?>

или так:

<?php
$args = array(
  'name' => 'ispolzovaniye-zaprosov-wp-query-v-wordpress' // слаг поста
);
?>

Использование параметра name содержит риски, если кто-то его изменит в будущем, поэтому использование идентификатора публикации безопаснее, поскольку его нельзя изменить.

 

Запрос, который вернет отдельную публикацию (типа страница)

Чтобы получить одну конкретную страницу вы тоже сможете использовать 2 разных варианта:

  1. Использовать идентификатор страницы: page_id (int)
  2. Использовать слаг (часть URL) страницы: pagename (string) (! это не заголовок страницы)

Для того, чтобы получить только одну конкретную страницу из базы данных, используйте одно из следующих:

<?php
$args = array(
  'page_id' => '25' // ID страницы
  // или же так
  // 'pagename' => 'chast-url-adresa-stranitsy' // слаг страницы
);
?>

 

Запрос, который вернет отдельную публикацию (другого типа)

Если вам нужно получить публикации другого типа (не пост и не страница), включая нестандартный тип публикации (CPT), тогда используйте параметр post_type. Например, если вам нужен один товар (публикация с типом product), запрос может выглядеть так:

<?php
$args = array(
  'p' => '1907',
  'post_type' => 'product'
);
?>

или если вам нужно вложение (тип attachment — прикрепленное изображение):

<?php
$args = array(
  'p' => '1155',
  'post_type' => 'attachment'
);
?>

 

Какие типы публикаций можно указывать в запросе

В некоторых из предыдущих примеров я использовал параметр post_type, который указывается для идентификации публикаций определенного типа. Давайте рассмотрим основные типы публикаций в WordPress:

  • post: публикация с типом пост, сообщение и т.д. Это значение по умолчанию!
  • page: публикация с типом страница
  • revision: публикация с типом редакция (ревизия, архивная копия, автосохранение поста и т.д.)
  • attachment: публикация с типом вложение (миниатюры постов)
  • nav_menu_item: отдельный тип для пункта навигационного меню
  • any: для публикаций с любым типом (кроме ревизий и если тип установлен для 'exclude_from_search' в значение true)
  • CPT (Custom Post Types – специальные типы публикаций (например, product, или любой тип, созданный вами функцией register_post_type())

 

Запрос на дочерние страницы

Часто бывает, что программистам сайта на ВордПресс нужно получить все страницы, которые являются дочерними для текущей страницы (кроме публикаций с типом post — они не иерархичны). Тогда стоит воспользоваться чем-нибудь из этих трех аргументов:

  • Использовать идентификатор страницы для возврата только ее дочерних страниц: post_parent (int). Установка 0 будет возвращать только записи верхнего уровня (все родительские публикации).
  • Использовать массив «вхождения» идентификаторов публикаций: post_parent__in (array):
  • Использовать «обратный» массив идентификаторов публикаций: post_parent__not_in (array).

 

Давайте рассмотрим каждый из этих вариантов на практике:

<?php
$args = array(
  'post_type' => 'page', // обязательно указывать, если это не post
  'post_parent' => '18' // ID текущей страницы
  // чтобы найти все страницы, которые являются дочерними для данной страницы (с ID 18)
);
?>

 

Чтобы добавить динамики в запрос и автоматически получать ID текущей страницы, а не записывать его «жестко», вот как это можно оформить:

<?php
$current_page_id = get_the_ID(); // получить ID текущей страницы
$args = array(
  'post_type' => 'page',
  'post_parent' => $current_page_id // динамически подставлять ID на текущей странице
);
?>

 

Запрос, работающий с массивом публикаций

Для таких запросов можно использовать один из двух аргументов (их нельзя использовать одновременно):

  • Использование массива идентификаторов публикаций (входящих в массив): post__in (array)
  • Использование массива идентификаторов публикаций (не входящих в массив): post__not_in (array)

 

Вариант первого использования:

<?php
$args = array(
  //  перечисляем ID нужных публикаций
  'post__in' => array(
    '177',
    '94',
    '58'
  ),
  'post_status' => 'any', // чтобы включить публикации со всеми статусами
  'ignore_sticky_posts' => 'true' // чтобы исключить "прикрепленные" публикации, ведь они всегда входят в запрос
);
?>

 

Другой аргумент – post__not_in — работает подобным образом, но он выведет все публикации, кроме перечисленных в запросе. Иногда это действительно бывает полезным:

<?php
$args = array(
  'post_type' => 'product', // если нам нужны товары, и кроме указанных ниже
  // перечисляем ID товаров для исключения
  'post__not_in' => array(
    '127',
    '391',
    '559'
  )
);
?>

 

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

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

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

 

 

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

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


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