商品ページのタイトルが分類「review-product」からの自分の用語と一致する場合は、投稿タイプ「reviews」からのレビューを表示する商品ページを作成しています。
例です。
商品ページタイトル: 冷蔵庫
次の投稿を表示(レビュー)
これはまったく問題ありません。しかし、時々私は製品のレビューがない(製品タイトルと用語の間に一致がないので)、そしてそれから私は '一般的な'レビューを見せたいです。私のウェブサイトではこれらは以下の投稿です。
この投稿には、分類学からの用語 'review-product'はありません。
私の質問:
商品タイトルに一致するレビュー投稿がない場合、どうすれば用語なしでレビュー投稿を表示できますか。
これは私が今持っているものです:
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();
}
WP_Query
の同じオブジェクトを2回使用することはできません。したがって、どの用語にも割り当てられていない投稿を取得するには、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
演算子を使用して引数としてtax-queryに渡すことです。
あなたの例の2番目のループは新しいWP_Query
オブジェクトを辿るべきです。
$posts_query = new WP_Query( array(
'tax_query' => array(
array(
'taxonomy' => 'foo',
'operator' => 'NOT EXISTS', // or 'EXISTS'
),
),
) );