我有一个让我困惑的WordPress tax_query。
我有与产品相关的帖子。每种产品都属于与性别相关的类别。
所以有些帖子是“男人”的,有些是“女人”的。但是有些产品在“男人”和“女人”中都有。例如一个背包。还有一些产品(比如家用电器)既不属于“男人”,也不属于“女人”。
那么如何使用WP_Query进行查询呢?你可以在下面看到我的尝试,但当一个帖子同时出现在“男人”和“女人”中时,它不起作用。有什么建议吗?
// Build Gender Tax-Query, based on known user gender
if($user_gender == 'male') {
// User is a male
$gender_query = array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'womens',
'operator' => 'NOT IN'
);
} elseif($user_gender == 'female') {
// User is a female
$gender_query = array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'mens',
'operator' => 'NOT IN'
);
} else {
// User is unknown gender
$gender_query = array();
}
// Get posts
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 2,
'orderby' => 'rand',
'tax_query' => array(
'relation' => 'AND',
$gender_query
),
);
$posts = get_posts($args);谢谢你的帮助!
发布于 2013-08-10 03:53:31
我建议构建一个自定义的SQL查询来传递给$wpdb,因为复杂的分类查询比它们的SQL等价物更难实现。
注意:你总是可以使用output the most recent SQL WordPress executed。这是调试这类问题的一种非常好的方法。
回到你的问题,这是最终代码片段的样子:
$gender = 'unknown';
$taxonomy = array('male' => 'mens', 'female' => 'womens');
$where_clause = '';
if ( array_key_exists($gender, $taxonomy) ) {
$where_clause = sprintf("WHERE %s = '%s'", "$wpdb->terms.slug", $taxonomy[$gender]);
}
$query = "SELECT $wpdb->posts.* FROM $wpdb->posts
INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
INNER JOIN $wpdb->terms ON ($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
$where_clause";
$posts = $wpdb->get_results($query);更新
如果您更喜欢使用tax_query:
$gender = 'unknown';
// Build Gender Tax-Query
if($gender == 'male') {
$gender_query = array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'mens',
'operator' => 'IN'
)
);
} elseif($gender == 'female') {
$gender_query = array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => 'womens',
'operator' => 'IN'
)
);
} else {
$gender_query = array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array('mens', 'womens'),
'operator' => 'IN'
)
);
}
// Get posts
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 2,
'orderby' => 'rand',
'tax_query' => $gender_query
);
$posts = get_posts($args);这两个答案的关键是,你不应该排除基于性别的项目,而应该包括(假设性别中性的项目在女性和男性中进行了适当的分类)。
https://stackoverflow.com/questions/18152720
复制相似问题