Понимание того, как использовать функцию 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), тогда все станет намного проще для понимания.
(Быстрый совет: если вы наведете указатель мыши на пользовательскую таксономию в левом меню на панели мониторинга и посмотрите в нижней части окна браузера, небольшое всплывающее окно даст вам подробную информацию о том, какой тип записи и как называется таксономия.)
Второй аргумент — это термины или какой термин мы хотим исключить. Мы исключаем термин «poroda-sobak» из нашего цикла.
В-третьих, у нас есть поле, где мы можем выбрать, что использовать — slug или ID.
Наконец, мы используем аргумент оператора, чтобы сказать WordPress, что мы хотим исключить термин poroda-sobak в таксономии, сказав NOT IN.
Давайте перейдем в тело цикла. Мы создадим новую переменную под названием $loop и установим ее равной wp_query при передаче переменной $args, которую мы установили ранее. Далее идет объявление while, но здесь есть разница, которую вы увидите из стандартного цикла, который мы рассмотрели выше. Мы должны указать, что have_posts() и the_posts () будут использовать новый WP_Query, а не стандартный цикл. Это достигается путем добавления переменной $loop перед ними.
Между Открытием и окончанием вы можете добавить все обычные функции WordPress и html.
Пример
Давайте с помощью кода, который я показала в начале статьи, выведем пользовательские записи из пользовательской таксономии «порода собак» на главной странице.
Если мы хотим вывести все, кроме собак, тогда нужно поменять NOT IN на IN
‘operator’=>’IN’, // Оператор выбора-IN для включения, NOT IN для исключения
Теперь, когда вы знаете, как использовать wp_query, зайдите на кодекс WP https://codex.wordpress.org/Class_Reference/WP_Query, чтобы увидеть все возможные способы расширения и настройки wp_query.