WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Исключить посты из таксономии «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
Роман
8 месяцев назад
  • 2
    stepan2273 www.weblancer.net/users/stepanko/?affili...

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

    Роман 8 месяцев назад

    Пробовал 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 8 месяцев назад

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

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

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

    $query = ...
    Роман 8 месяцев назад
    // 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 8 месяцев назад
    // 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"

    Роман 8 месяцев назад

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

    'field'    => 'slug',
    			'terms'    => ['-youtube'] 
    'field'    => 'slug',
    			'terms'    => [-'youtube'] 
    'field'    => 'id',
    			'terms'    => array( -7682)
    stepan 8 месяцев назад
    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
    Роман 8 месяцев назад

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

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

    stepan 8 месяцев назад
                'terms'    => ['youtube'],

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

    Роман 8 месяцев назад

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

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

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

    stepan 8 месяцев назад

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

    stepan 8 месяцев назад

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

    Роман 8 месяцев назад

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