Исключить посты из таксономии «N»
Посты в темплейте выводятся кодом
<?php query_posts($query); while(have_posts()){ the_post(); get_template_part('inc/parts/item'); } wp_reset_query(); ?>
У этих постов есть категории, которые добавлены через отдельную таксономию "genres"
Как возможно в коде выше исключить посты из вывода, если к ним присвоена категрия "N" в таксономии "genres"?
И как кодом выше наоборот вывести посты только из категории "N" в таксономии "genres"?
Спасибо!
https://wp-kama.ru/function/wp_query#taxonomies
Параметр tax_query
Почитайте, подумайте.
Напишите код, потом будут вопросы - пишите сюда - ответим.
Пробовал 2-мя способами вывести посты только из нужной категории
<?php query_posts($query = new WP_Query( array( 'tax_query' => array( array( 'taxonomy' => 'genres',// Таксономия 'field' => 'slug', 'terms' => 'youtube'// Категория ) ) ) )); while(have_posts()){ the_post(); get_template_part('inc/parts/item'); } wp_reset_query(); ?>и
<?php query_posts( $query = new WP_Query( array( 'genres' => 'youtube' ) )); while(have_posts()){ the_post(); get_template_part('inc/parts/item'); } wp_reset_query(); ?>Не выводит ничего (
покажте, что находится в переменной $query
То есть, где оно кодом обьявл, как создается.
То есть, наведите участок кода, где та переменная есть
типа такого:
// Compose Query $query = array( 'post_type' => array('movies'), 'showposts' => $pitm, // 'cat' => $exc, 'orderby' => $orde, 'order' => $ordr ); // End DataДалее уже вывод самого кода
<?php query_posts($query); while(have_posts()){ the_post(); get_template_part('inc/parts/item'); } wp_reset_query(); ?>Т.е. задача продублировать вывод, но с разными параметрами. в 1-ом выводе надо исключить категорию "youtube", а во 2-ом наоборот только включить категорию "youtube"
// Compose Query $query = array( 'post_type' => array('movies'), 'showposts' => $pitm, // 'cat' => $exc, 'orderby' => $orde, 'order' => $ordr, 'tax_query' => array( array( 'taxonomy' => 'genres',// Таксономия 'field' => 'slug', 'terms' => ['youtube'] // Категория ) ) ); // End DataКод выше выведет записи movies, которые отмечены в категориях-genres "youtube"
Спасибо, помогло! Дублирования постов я добился просто подключением нового шаблона с выводом, а вот исключить в 1-ом варианте категорию "youtube" не понял как. Пробовал 3-мя способами:
// Compose Query $query = array( 'post_type' => array('movies'), 'showposts' => $pitm, // 'cat' => $exc, 'orderby' => $orde, 'order' => $ordr, 'tax_query' => array( array( 'taxonomy' => 'genres',// Таксономия 'field' => 'slug', 'terms' => ['youtube'], // Категория 'operator' => 'NOT IN' ) ) ); // End DataПробовал по slug, ID, в скобках []
ошибку выдает
выше код также исправил.
Сделал немного по другому
В итоге заработало как надо.
Спасибо за помощь!
Отмечайте вопрос "как решенный".
Принимайте ответ "как правильный", закрывайте вопрос.
Неожиданно обнаружил одну проблему с выводом. Есть раздел
/movies/ со страницами /movies/page/2/ /movies/page/3/ и т.д.
Посты в нем выводятся так
if(have_posts()){ while(have_posts()){ the_post(); get_template_part('inc/parts/item'); } }Добавил код для исключения категории вывода
// Compose Query $query = array( 'post_type' => array('movies'), 'showposts' => $pitm, // 'cat' => $exc, 'orderby' => $orde, 'order' => $ordr, 'tax_query' => array( array( 'taxonomy' => 'genres',// Таксономия 'field' => 'id', 'terms' => array( 7682 ), 'operator' => 'NOT IN', ) ) ); // End DataИ сам вывод
query_posts($query); if(have_posts()){ while(have_posts()){ the_post(); get_template_part('inc/parts/item'); } }Нужные посты исключаются, все ок. Но теперь на страницах пагинации везеде выводятся только посты с 1-ой странцы /movies/ Т.е. они просто дублируются везде, а новые не выводятся. Это можно починить или может есть другой код для исключения?
В гугле нашел такое решение
Но оно не помогло
// Compose Query $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $query = array( 'post_type' => array('movies'), 'showposts' => $pitm, // 'cat' => $exc, 'orderby' => $orde, 'order' => $ordr, 'tax_query' => array( array( 'taxonomy' => 'genres',// Таксономия 'field' => 'slug', 'terms' => ['youtube'], // Категория 'operator' => 'NOT IN' ) ), 'paged' => $paged ); // End Data