Я не могу успешно фильтровать сообщения из некоторых категорий и одновременно исключать из других. Код работает отлично, когда используется для включения только сообщений из данной категории. Категории, которые должны быть включены, являются подкатегориями, а исключенные категории – это основные категории (они не являются родителями включенных подкатегорий)
Примеры:
1) Используйте одновременно category__in
и category__not_in
$wpid = get_category_id($_REQUEST['param']); $cat_arr = array($wpid); $args = array( 'category__in' => $cat_arr, 'category__not_in' => array(350,351), 'posts_per_page' => 10, 'post_status' => 'publish', 'suppress_filters' => 0 ); $the_query = new WP_Query( $args ); while ($the_query -> have_posts()){ . . }
2) Используйте только category__in
с отрицательными значениями:
$wpid = get_category_id($_REQUEST['param']); $cat_arr = array($wpid); array_push($cat_arr, -350, -351); $args = array( 'category__in' => $cat_arr, 'posts_per_page' => 10, 'post_status' => 'publish', 'suppress_filters' => 0 ); $the_query = new WP_Query( $args ); while ($the_query -> have_posts()){ . . }
Вы можете использовать таксономический запрос , например:
$args = array( 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'category', 'terms' => array(), 'operator' => 'IN' ), array( 'taxonomy' => 'category', 'terms' => array(), 'operator' => 'NOT IN', ), ), ); $query = new WP_Query( $args );
Это будет запрашивать сообщения, которые находятся в первом наборе терминов И не во втором наборе.
Попробуйте этот код. Не проверено
<?php $args = array( 'tax_query' => array( 'relation' => 'AND', // logical relationship between taxonomy arrays array( // subcategories to exclude 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => array(350, 351), 'operator' => 'NOT IN', // exclude 'post_parent' => 0 // top level only ), array( // categories to include 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => array($cat_arr), // 'include_children' => false ) ), 'posts_per_page' => 10, // more lines if needed );
Я отключил suppress_filters
потому что это не подходит для WP_Query
.
Может быть, вы захотите использовать 'include_children' => false
(закомментировано в коде), если вы не хотите показывать сообщения из подкатегорий $cat_arr
.