Intereting Posts
Как направить мой сайт на правильный URL без панели инструментов WordPress прослушивает $ _POST в functions.php Добавить код внутри стандартной функции wordpress Как отключить TinyMCE от удаления тегов span Предварительно заполнить WordPress wp_media modal с выбором изображения Wp admin – установить значение по умолчанию 999 в комментариях Настроить элемент управления не показывает значение настройки, которое было добавлено через JS API Почему Featured Image не отображается в моем настраиваемом типе сообщений? Попросите зарегистрированного пользователя повторно ввести пароль для доступа к странице «x» Как изменить канал по умолчанию с помощью функции Все ли редактирование WordPress происходит внутри панели инструментов, или мы можем использовать наш собственный текстовый редактор? Пользовательские типы сообщений не импортируются должным образом Добавить пользователя meta после регистрации пользователем и войти в систему Как перевести эту строку – вопрос синтаксиса PHP Как показать функцию the_content в этом цикле?

Как выбрать должности из одной категории, но исключить должности в другой категории?

Я пытаюсь выбрать сообщения, которые имеют категорию id 4 но исключают сообщения, которые также имеют идентификатор категории 2

Вот что я пытаюсь

 $query = new WP_Query(array( "cat__in" => array(4), "cat__not_in" => array(2), "post_type" => "post", "post_status" => "publish", "orderby" => "date", "order" => "DESC", "posts_per_page" => $limit, "offset" => 0 )); 

Однако это не делает правильный выбор. Что я делаю не так?

Solutions Collecting From Web of "Как выбрать должности из одной категории, но исключить должности в другой категории?"

Используйте pre_get_posts чтобы исключить категории, которые вы не хотите отображать в цикле.

 function exclude_posts_from_specific_category( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'cat', '-2' ); } } add_action( 'pre_get_posts', 'exclude_posts_from_specific_category' ); 

Или создайте новый WP_Query и используйте параметры категории.

 <?php $args = array( 'category__not_in' => 2 , 'category__in' => 4 ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { echo '<ul>'; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '<li>' . get_the_title() . '</li>'; } echo '</ul>'; } else { } wp_reset_postdata(); 

Если вы хотите показывать сообщения только из одной категории, вы должны использовать архив категорий. См. Template Hierarchy .

Как оказалось, это можно сделать четырьмя отдельными способами

Использование cat с отрицательным числом

 $query = new WP_Query(array( "cat" => "4, -2", // ... )); 

Использование category__in и category__not_in

Я ошибочно использовал cat__in и cat__not_in которые не являются допустимыми параметрами WP_Query

 $query = new WP_Query(array( "category__in" => array(4), "category__not_in" => array(2), // ... )); 

Использование tax_query

 $query = new WP_Query(array( "tax_query" => array( "relation" => "AND", array( "taxonomy" => "category", "field" => "term_id", "terms" => array(4) ), array( "taxonomy" => "category", "field" => "term_id", "terms" => array(2), "operator" => "NOT IN" ), ), // ... )); 

Используя фильтр pre_get_posts (как предоставлено Брэдом Далтоном)

 function exclude_posts_from_specific_category($query) { if ($query->is_home() && $query->is_main_query()) { $query->set("cat", "-2"); } } add_action("pre_get_posts", "exclude_posts_from_specific_category"); 

Предположим, у вас есть сообщения с идентификатором cat 4.

 query_posts('cat=4'); while (have_posts()) : the_post(); the_content(); endwhile;