如何向我的筛选器查询添加关系参数?

时间:2017-05-24 作者:Chance Strickland

我正在使用一个带有三个选择字段的表单构建一个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 );
我在哪里漏掉了标记?还有一个附带的问题,我用来构建查询的方法似乎非常重复,我相信一定会有一种更好、更枯燥的方法,我可以用它把这个问题缩小一点。建议是非常受欢迎的。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

您的每个代码块都将覆盖以前的代码块,您需要将其添加到数组中,而不是替换它:

$args[\'tax_query\'][] = array(
    \'taxonomy\' => \'region\',
    \'field\'    => \'id\',
    \'terms\'    => $_POST[\'region_filter\']
);
relationAND 默认情况下,可以省略它,但如果要显式设置它:

$args[\'tax_query\'][\'relation\'] = \'AND\';

结束

相关推荐

Exclude Tags by Array

谢谢你的帮助!。我正在尝试显示所有标记,但以标记(“作者:”)开头的标记除外。我已经知道了如何排除单个标记(只需将其键入exclude参数)。我已经知道了如何排除标记数组(创建了一个数组并手动添加了几个值)。但我还没有弄清楚如何基于get\\u term\\u by填充数组(或者这是否是最好的方法)。<div id=\"tagarea\"> <div class=\"contained\"> <h2>Categories</h2><