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
Роман
28 дней назад
  • 1
    stepan2268 www.weblancer.net/users/stepanko/?affili...

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

    Роман 27 дней назад

    Пробовал 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 27 дней назад

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

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

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

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

    Роман 27 дней назад

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

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

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

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

    stepan 27 дней назад
                'terms'    => ['youtube'],

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

    Роман 27 дней назад

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

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

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

    stepan 27 дней назад

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

    stepan 27 дней назад

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

    Роман 23 дня назад

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