Понимание того, как использовать функцию wp_query может поднять ваши навыки создания темы на WordPress на следующий уровень. Цель функции wp_query-расширить / настроить цикл WordPress, давая вам очень конкретные запросы и создавая некоторые очень мощные функции на ваших веб-сайтах. Это, безусловно, более сложный фрагмент кода, который требует много точной информации, но как только вы узнаете основы, вам будет легко освоить его использование.

Основной Цикл WordPress

Давайте посмотрим на базовую структуру цикла:

<?php

if ( have_posts() ) :

while ( have_posts() ) : the_post();

//

Здесь контент

//

endwhile; // end while

endif; // end if

?>
Простая расшифровка этого цикла:
• Если есть записи – if ( have_posts() )
• Пока есть записи – while ( have_posts() )
• Показать записи – the_post();
Базовая структура цикла показывает все сообщения определенного типа на основе используемого файла шаблона. Иногда вы можете сузить результаты цикла и создать один или даже несколько пользовательских запросов цикла. Здесь входит в игру wp_query.

WP_Query

Взгляните на код ниже.

$args = array(
‘post_type’ => ‘pets’,
‘posts_per_page’ => 8,
‘tax_query’ => array (

array(
‘taxonomy’ => ‘taxonomy1’, // Мои Пользовательские Таксономии
‘terms’ => ‘poroda-sobak’, // Термин, который я хочу исключить
‘field’ => ‘slug’, // Передаю ли я term slug или term ID
‘operator’ => ‘NOT IN’, // Оператор выбора-IN для включения, NOT IN для исключения
),
),
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>

<?php echo ‘<ul class=”reletive”>’;?>

<li><a href=”<?php the_permalink() ?>”><?php the_post_thumbnail(array(82, 82))?><?php the_title(); ?></a></li>

<?php echo ‘</ul>’;

wp_reset_query();
?>

<?php endwhile; ?>

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

Мне нравится начинать с атрибута post_type. Это скажет WordPress, какие записи вы хотели бы поместить в этот шаблон. В этом примере я вытягиваю пользовательский тип записей под названием pets, который мы создали в одной из предыдущих статей. Если вы хотите, чтобы wp_query вытащил ваши стандартные записи, используйте post вместо pets.

Затем мы сообщаем WordPress, сколько записей мы хотели бы отобразить в этом шаблоне, используя аргумент posts_per_page. Я выбрала для отображения 8 записей из типа пользовательских сообщений pets.

То, что происходит дальше, немного сложнее. tax_query используется для фильтрации сообщений на основе пользовательской таксономии. Здесь мы хотим вытащить всех домашних животных, кроме домашних животных, которые находятся в категории «порода собак». Обратите внимание, что у нас есть массив в массиве. Первый аргумент во втором массиве является arg таксономии и запрашивает имя пользовательской таксономии. Название нашей таксономии-taxonomy1, именно так я назвала ее при создании моей таксономии.

Рекомендую ознакомиться с предыдущими статьями – Пользовательские Таксономии В WordPress и Пользовательские типы записей WordPress (Custom Post Types), тогда все станет намного проще для понимания.

Как использовать функцию WP_Query

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

Как использовать функцию WP_Query
Второй аргумент — это термины или какой термин мы хотим исключить. Мы исключаем термин “poroda-koshek” из нашего цикла.
В-третьих, у нас есть поле, где мы можем выбрать, что использовать – slug или ID.
Наконец, мы используем аргумент оператора, чтобы сказать WordPress, что мы хотим исключить термин  poroda-sobak в таксономии, сказав NOT IN.

Давайте перейдем в тело цикла. Мы создадим новую переменную под названием $loop и установим ее равной wp_query при передаче переменной $args, которую мы установили ранее. Далее идет объявление while, но здесь есть разница, которую вы увидите из стандартного цикла, который мы рассмотрели выше. Мы должны указать, что have_posts() и the_posts () будут использовать новый WP_Query, а не стандартный цикл. Это достигается путем добавления переменной $loop перед ними.
Между Открытием и окончанием вы можете добавить все обычные функции WordPress и html.

Пример

Давайте с помощью кода, который я показала в начале статьи, выведем пользовательские записи из пользовательской таксономии «порода собак» на главной странице.
Как использовать функцию WP_Query
Если мы хотим вывести все, кроме собак, тогда нужно поменять NOT IN на IN

‘operator’=>’IN’, // Оператор выбора-IN для включения, NOT IN для исключения


Теперь, когда вы знаете, как использовать wp_query, зайдите на кодекс WP https://codex.wordpress.org/Class_Reference/WP_Query, чтобы увидеть все возможные способы расширения и настройки wp_query.