使用查询修改的WordPress过滤器功能

时间:2013-09-22 作者:Tudor Ravoiu

我正在尝试为自定义帖子类型归档页面上的主查询构建一个过滤器函数。

自定义帖子类型命名为“Hotel”。对于这种自定义帖子类型,我有一个名为“Facilities”的自定义分类法。每个“酒店”岗位可以有一个或多个设施。

我为每个可用的分类法构建了一个带有复选框的表单函数。此外,我还为pre\\u get\\u posts函数构建了一个钩子,如下所示:

$facilitati = isset($_POST[\'fac\']) ?
    array(
    \'taxonomy\' => \'facilitati\',
    \'field\' => \'id\',
    \'terms\' => $_POST[\'fac\'],
    \'operator\' => \'IN\'
) :
array(
    \'taxonomy\' => \'facilitati\',
    \'field\' => \'id\',
    \'terms\' => array( 0 ),
    \'operator\' => \'NOT IN\'
);

$arr = array(
    \'relation\' => \'AND\',
    $locatii,
    $facilitati
);

$query->set(\'tax_query\', $arr );
问题是,这不是我想要的功能。例如,酒店“ABC”有设施:电视、电话、WIFI、停车场酒店“DEF”有设施:电视、电话、餐厅酒店“GHI”有设施:WIFI、停车场

如果我检查表格中的所有设施,所有酒店都会显示出来。这很有道理,因为在我看来tax_query 查看已检查设施数组中的所有术语。

因此,例如,如果酒店“GHI”只有设施WIFI和停车场,它也会显示出来,因为这两个设施位于所有设施的阵列中。

是否有任何可能的方法进行此筛选?此外,我还希望能够获得以下信息:如果只检查了WIFI和停车场设施,结果不仅应该由酒店“GHI”检查,还应该由酒店“ABC”检查。

我在整个WordPress WP查询类描述中搜索了一个解决方案,但没有找到。

1 个回复
SO网友:cybmeta

我认为您的问题与使用operator 您的tax_query. 实际上您正在使用INNOT IN. 从你的问题我知道你想要AND. 此外,您不需要设置terms aguments收件人0 如果$_POST[] 未设置:

if(isset($_POST[\'fac\'])) {
    // I assume that $_POST[\'fac\'] is an array with the terms ID
    // because you talked about an array of checkbox inputs in your form
    // also, as you are using the field => \'id\' I assume that the value of
    // each checkbox is a term ID
    $terms = array_map(\'intval\', $_POST[\'fac\']);
    $facilitati =  array(
                      \'relation\' => \'AND\',
                      array(
                           \'taxonomy\' => \'facilitati\',
                           \'field\'    => \'id\',
                           \'terms\'    => $terms,
                           \'operator\' => \'AND\'
                      ),
                  );
    $query->set(\'tax_query\', $facilitati );
}
为了获得进一步的帮助,我需要知道$\\u POST[\'fac\')的预期数据类型。

结束