可以肯定的是,您无法在一个查询中匹配多个分类术语——Wordpress只会尊重第一个,而忽略其余的。
显然,这将在3.1中修复。
同时,有一个插件可以立即修复您:http://scribu.net/wordpress/query-multiple-taxonomies
EDIT:如果您想要非插件解决方案,请告诉我。我有一个我用的。
EDIT:这是一种快速而肮脏的非插件方式。将此代码放入函数中。php文件。
function wpse_5057_match_multiple_taxonomy_terms($where_clause, $wp_query) {
// If the query obj exists
if (isset($wp_query->query)) {
$multi_query = $wp_query->query;
if (is_array($multi_query) && isset($multi_query[\'multiple_terms\'])) {
global $wpdb;
$arr_terms = $multi_query[\'multiple_terms\'];
foreach($arr_terms as $key => $value) {
$sql = "AND $wpdb->posts.ID IN(
SELECT tr.object_id
FROM $wpdb->term_relationships AS tr
INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id
WHERE tt.taxonomy=\'%s\' AND t.slug=\'%s\')";
$where_clause .= $wpdb->prepare($sql, $key, $value); // add to the where
}
}
}
return $where_clause; // return the filtered where
}
add_action(\'posts_where\',\'wpse_5057_match_multiple_taxonomy_terms\',10,2); // Hook this to posts_where
现在,当您运行查询时,添加一个名为multiple\\u terms的新参数。这应该包含一个数组,其中键是分类名称,值是要匹配的值。像这样:
$args = array(
\'post_type\' => \'rv\',
\'multiple_terms\' => array(\'manufacturer\' => \'Keystone\', \'rvtype\' => \'fifth-wheel\')
);
对我有用。这是根据我在另一个论坛或博客上找到的想法修改的,但我一生都找不到它。