我正试图创建一个函数来处理显示产品的多种分类要求。我警告你,这是一篇很长的帖子,因为我已经展示了解决方案的想法的迭代,但没有奏效。
http://cheekymonkeymedia.ca/blog/using-wordpress-query-multiple-taxonomies#sthash.h7ZyhyGn.dpuf
上面链接了一个基本的示例,我正试图围绕这个示例对代码进行建模。
我之所以使用这个方向,是因为我有自定义的帖子,它们有自定义的分类法。除了我已经获取了数组的值,并希望根据用户的请求生成它们。
将这样的数组传递给函数,以请求发布。
$requirements = array(
array(
'taxonomy' =>'category',
'term' =>'cheese'
),
array(
'taxonomy' =>'dairy',
'term' =>'yogurt'
),
);
我试着这样使用,但你不能在数组中foreach。这是我看待解决方案的逻辑方式。尽管我知道这是错误的。
function query_mult_tax($array){
$myquery['tax_query'] = array(
'relation' => 'OR',
foreach($array as $param){
array(
'taxonomy' => $param["taxonomy"],
'terms' => $param["term"],
'field' => 'slug',
);
}
);
query_posts($myquery);}
经过一些修改,我发现我可以在数组之外做foreach,但传递信息的唯一方法是在数组中。然而,当前函数总是使用不需要的数组来编写查询,从而扭曲所需的信息。这让我陷入了困境,因为我不知道如何逃离父数组中不需要的数组(因为我无法循环出它)。
function fruit_query_mult_tax($array){
wp_reset_query();
//create the basic query
$query = array('post_type' => 'fruit',
'tax_query' => array()
);
// create the arrays
foreach($array as $param){
$args[]= array(
'taxonomy' => $param["taxonomy"],
'terms' => $param["term"],
'field' => 'slug',
'operator' => "IN",
);
}
$query['tax_query'] = array(
'relation' => 'OR',
$args
);
$result = new WP_Query($query);
return $result;
}
查询转储中具有挑战性的部分看起来是这样的:
[tax_query] => Array
(
[relation] => OR
[0] => Array
(
[0] => Array
(
[taxonomy] => category
[terms] => cheese
[field] => slug
[operator] => IN
)
[1] => Array
(
[taxonomy] => dairy
[terms] => yogurt
[field] => slug
[operator] => IN
)
)
)
而不是这才是有效的。
[tax_query] => Array
(
[relation] => AND
[0] => Array
(
[taxonomy] => category
[terms] => cheese
[field] => slug
[operator] => IN
)
[1] => Array
(
[taxonomy] => dariy
[terms] => yogurt
[field] => slug
[operator] => IN
)
)
这是非常接近的,除了被包裹,它被包裹在一个数组中。我该如何逃离或格式化?我无法通过foreach执行此操作,因为我在父数组中。我尝试过$args[0]
,它只给了我第一组可能有很多的规则。
经过一段时间的修补,我终于明白了。我需要在税务查询已经建立之后进行foreach。
function fruit_query_mult_tax($array){
wp_reset_query();
$query = array('post_type' => 'fruit',
'tax_query' => array()
);
$query['tax_query'] = array(
'relation' => 'AND',
);
foreach($array as $param){
$query['tax_query'][]= array(
'taxonomy' => $param["taxonomy"],
'terms' => $param["term"],
'field' => 'slug',
'operator' => "IN",
);
}
$result = new WP_Query($query);
return $result;}
希望这能帮助其他尝试类似多情况税务查询的人