我正在使用一个带有三个选择字段的表单构建一个AJAX后过滤器,允许用户按三种不同的分类法进行排序(category
, region
, 和country
). 单独使用时,每个选择字段的一切都很好,但当我在两个或三个字段中选择选项时,我希望确保tax_query
阵列还有一个relation
参数设置为AND
以便post结果满足每个字段中设置的所有条件。以下是我的出发点:
$args = array(
\'orderby\' => \'date\',
\'order\' => $_POST[\'date\'],
);
// Regions
if ( isset( $_POST[\'region_filter\'] ) ) {
$args[\'tax_query\'] = array(
array(
\'taxonomy\' => \'region\',
\'field\' => \'id\',
\'terms\' => $_POST[\'region_filter\']
)
);
}
// Countries
if ( isset( $_POST[\'country_filter\'] ) ) {
$args[\'tax_query\'] = array(
array(
\'taxonomy\' => \'country\',
\'field\' => \'id\',
\'terms\' => $_POST[\'country_filter\']
)
);
}
// Categories
if ( isset( $_POST[\'category_filter\'] ) ) {
$args[\'tax_query\'] = array(
array(
\'taxonomy\' => \'category\',
\'field\' => \'id\',
\'terms\' => $_POST[\'category_filter\']
)
);
}
if (
isset( $_POST[\'region_filter\'] ) && isset( $_POST[\'country_filter\'] ) ||
isset( $_POST[\'region_filter\'] ) && isset( $_POST[\'category_filter\'] ) ||
isset( $_POST[\'country_filter\'] ) && isset( $_POST[\'category_filter\'] ) ||
isset( $_POST[\'region_filter\'] ) && isset( $_POST[\'country_filter\'] ) && isset( $_POST[\'category_filter\'] )
) {
// All conditions must be true to return posts
$args[\'tax_query\'] = array( \'relation\'=>\'AND\' );
}
$filter_query = new WP_Query( $args );
我在哪里漏掉了标记?还有一个附带的问题,我用来构建查询的方法似乎非常重复,我相信一定会有一种更好、更枯燥的方法,我可以用它把这个问题缩小一点。建议是非常受欢迎的。