[英]WP_Query Multiple Category Parameters not working
情况:我无法成功地在WP_Query中的类别参数中搜索到两个类别,这些类别混合了OR和AND关系。
说明:我有一个按地区,月份和年份排序的搜索/过滤器,效果很好! 使用category_name
参数时,它将成功搜索区域。
<?php // These grab data from the URL which are submitted by the form
$p_topi = $_GET['topic'];
$p_reg = $_GET['region'];
$p_mon = $_GET['mon'];
$p_year = (int) $_GET['yr'];
?>
<?php
$archive_args = array(
'post_type' => 'thought_leadership',
'category_name' => $p_reg, // Pay attention to this
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
$archive_query = new WP_Query($archive_args);
if ($archive_query->have_posts()) : while ($archive_query->have_posts()) : $archive_query->the_post(); ?>
我被要求添加按主题排序。 我通过用category_name
替换变量来测试它,效果很好。
$archive_args = array(
'post_type' => 'thought_leadership',
'category_name' => $p_topi, // Changed the variable to topic
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
然后,我尝试将两个变量组合在一起,并且可以正常工作。 具体来说,它用作OR运算符,可以按区域或主题进行过滤。 不会同时过滤两者。
$archive_args = array(
'post_type' => 'thought_leadership',
'category_name' => "$p_topi, $p_reg", // Combined the variables
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
然后,我尝试使用+
符号使参数同时接受两个变量。 它可以工作,但是现在不能用作OR运算符。 换句话说,我必须选择一个主题和地区,否则搜索将找不到任何结果。
$archive_args = array(
'post_type' => 'thought_leadership',
'category_name' => "$p_topi+$p_reg", // + makes it an AND operator
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
我研究了WP_Query,并找到了出色的参考资料: https ://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters
我尝试了category__and
但是它没有匹配该条件的帖子返回。
$archive_args = array(
'post_type' => 'thought_leadership',
'category__and' => array( 12, 5 ), // 12 = ID for topic, 5 = ID for region
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
我还测试了category__in
但是发现它不会显示该类别的子级。 这是一个问题,因为主题和地区都有孩子。 就像category__and
一样,它返回时没有符合该条件的帖子。
$archive_args = array(
'post_type' => 'thought_leadership',
'category__in' => array( 12, 5 ),
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
);
如@Muhammad tayyab所建议,我尝试使用tax_query
。 我让它在&&的基础上工作。
$archive_args = array(
'post_type' => 'thought_leadership',
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'category', // correct
'field' => 'slug', // correct
'terms' => $p_reg,
),
array(
'taxonomy' => 'category', // correct
'field' => 'slug', // correct
'terms' => $p_topi,
)
,)
);
但是我无法成功使OR运算符与嵌套数组一起使用。
$archive_args = array(
'post_type' => 'thought_leadership',
'year' => $p_year,
'monthnum'=> $p_mon,
'posts_per_page' => 100,
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $p_reg,
),
array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $p_reg,
),
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $p_topi,
),
),
),
);
主要问题:您是否知道创建包含0、1或2个参数的搜索的任何方式? 换句话说,我需要进行设置,以便我的用户可以搜索区域和/或主题,或者根本不搜索。
您的问题含糊,但这可能会有所帮助:
$args = array(
'post_type' => 'post',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'movie_genre',
'field' => 'slug',
'terms' => array( 'action', 'comedy' ),
),
array(
'taxonomy' => 'actor',
'field' => 'term_id',
'terms' => array( 103, 115, 206 ),
'operator' => 'NOT IN',
),
),
);
$query = new WP_Query( $args );
您可以通过多种分类法进行搜索。 您可以在使用relation
到指定and
或not
关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.