eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

Исключить посты из таксономии «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
Роман
4.1 год назад
  • 2
    stepan 2283 weblancer.net/users/stepanko/?affiliate=...

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

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

    Пробовал 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 4.1 год назад

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

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

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

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

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

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

    'field'    => 'slug',
    			'terms'    => ['-youtube'] 
    'field'    => 'slug',
    			'terms'    => [-'youtube'] 
    'field'    => 'id',
    			'terms'    => array( -7682)
    stepan 4.1 год назад
    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
    Роман 4.1 год назад

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

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

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

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

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

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

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

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

    stepan 4.1 год назад

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

    stepan 4.1 год назад

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

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

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