Исключить посты из таксономии «N»

Посты в темплейте выводятся кодом

<?php query_posts($query); while(have_posts()){ the_post(); get_template_part('inc/parts/item'); } wp_reset_query(); ?>

У этих постов есть категории, которые добавлены через отдельную таксономию "genres"
Как возможно в коде выше исключить посты из вывода, если к ним присвоена категрия "N" в таксономии "genres"?

И как кодом выше наоборот вывести посты только из категории "N" в таксономии "genres"?

Спасибо!

0
Роман
3.2 года назад
  • 2
    stepan 2283 weblancer.net/users/stepanko/?affiliate=...

    https://wp-kama.ru/function/wp_query#taxonomies
    Параметр tax_query
    Почитайте, подумайте.
    Напишите код, потом будут вопросы - пишите сюда - ответим.

    Роман 3.2 года назад

    Пробовал 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(); 
    ?>
    

    Не выводит ничего (

    stepan 3.2 года назад

    Посты в темплейте выводятся кодом

    <?php query_posts($query); ...

    покажте, что находится в переменной $query
    То есть, где оно кодом обьявл, как создается.
    То есть, наведите участок кода, где та переменная есть
    типа такого:

    $query = ...
    Роман 3.2 года назад
    // 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"

    stepan 3.2 года назад
    // 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"

    Роман 3.2 года назад

    Спасибо, помогло! Дублирования постов я добился просто подключением нового шаблона с выводом, а вот исключить в 1-ом варианте категорию "youtube" не понял как. Пробовал 3-мя способами:

    'field'    => 'slug',
    			'terms'    => ['-youtube'] 
    'field'    => 'slug',
    			'terms'    => [-'youtube'] 
    'field'    => 'id',
    			'terms'    => array( -7682)
    stepan 3.2 года назад
    NOT IN - записи из всех терминов, кроме указанных.
    // 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
    Роман 3.2 года назад

    На сайте возникла критическая ошибка.

    Пробовал по slug, ID, в скобках []
    ошибку выдает

    stepan 3.2 года назад
                'terms'    => ['youtube'],

    выше код также исправил.

    Роман 3.2 года назад

    Сделал немного по другому

    'field'    => 'id',
    			'terms'    => array( 7682 ),
    			'operator' => 'NOT IN',

    В итоге заработало как надо.
    Спасибо за помощь!

    stepan 3.2 года назад

    Отмечайте вопрос "как решенный".

    stepan 3.2 года назад

    Принимайте ответ "как правильный", закрывайте вопрос.

    Роман 3.2 года назад

    Неожиданно обнаружил одну проблему с выводом. Есть раздел
    /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/ Т.е. они просто дублируются везде, а новые не выводятся. Это можно починить или может есть другой код для исключения?
    В гугле нашел такое решение

    $args['tax_query'] = array(
    	array(
    		'taxonomy' => 'genres',
    		'terms'    => array( 7682 ),
    		'operator' => 'NOT IN',
    	),
    );
    query_posts($args);

    Но оно не помогло

    stepan 3.2 года назад
    // 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
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация