我在一个产品页面上工作,如果产品页面标题与我在分类法“review product”中的术语相匹配,我将显示来自我的帖子类型“reviews”的评论。
Example.
产品页面标题:
Refrigerator显示(审阅)带有以下内容的帖子:
帖子类型:“评论”分类:“评论产品”术语:Refrigerator这完全可以。但有时我没有对产品的评论(因为产品名称和术语不匹配),然后我想显示“一般”评论。在我的网站中,这些帖子包含:
帖子类型:“评论”分类:“评论产品”术语:No term (!!!)这篇文章没有分类法中的“审查产品”一词。
My Question:
如果没有与产品标题匹配的评论帖子,我如何显示没有术语的评论帖子。
This is what I have now:
function gtp_show_reviews( $number = 100, $term = null ) {
$reviews = new WP_Query( array(
\'post_type\' => \'reviews\',
\'review-product\' => $term, // Fill this with product page slug (refrigerator)
));
if( $reviews->have_posts() ) {
while( $reviews->have_posts() ) {
$reviews->the_post();
// The review
}
}
else {
// Here I try to unset the \'review-product\' term
unset($reviews->query_vars[\'review-product\']);
unset($reviews->query_vars[\'term\']);
while( $reviews->have_posts() ) {
$reviews->the_post();
// Check if review has no term
if( $reviews->has_term() == false ) {
// The review
}
}
}
wp_reset_postdata();
}
最合适的回答,由SO网友:David 整理而成
不能使用的同一对象WP_Query
两次因此,您需要创建另一个具有tax_query
参数获取未分配给任何术语的帖子。
//fetch all reviews which have no assigned term in \'review-product\'
$taxonomy = \'review-product\';
$post_type = \'reviews\';
$args = [
\'post_type\' => $post_type,
\'tax_query\' => [
[
\'taxonomy\' => $taxonomy,
\'terms\' => get_terms( $taxonomy, [ \'fields\' => \'ids\' ] ),
\'operator\' => \'NOT IN\'
]
]
];
$query = new \\WP_Query( $args );
其思想是获取分类法中所有术语的列表,并使用
NOT IN
操作人员
示例中的第二个循环应该遍历新的WP_Query
对象