次のクエリを使用して、「サービス」商品カテゴリにない商品をすべて抽出し、カスタムメタフィールド「_vintage_age」でそれらを並べ替えます。
$q->set( 'tax_query', array(array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'Service' ),
'operator' => 'NOT IN'
)));
$q->set('meta_query',array(array(
'vtp_age' => array(
'key' => '_vintage_age',
'value' => array(1,2,3),
'compare' => 'IN'
))));
$q->set('orderby',array(
'vtp_age' => 'ASC',
'date' => 'ASC'
));
このクエリを1か月以上前にproduct_category 'Sold'で変更されたEXCLUDE商品に拡張する必要があります(つまり、売れ残りのないサービスのない商品と先月販売した商品をすべて表示する)。私の推測では、このようなものを使用することですが、どうすればこれを「販売済み」製品にのみ適用し、それを元のクエリに追加することができますか。
array(
'date_query' => array(
array(
'column' => 'post_modified_gmt',
'after' => '1 month ago',
),
))
ご協力ありがとうございます。
WP_Queryを使用してそのような高度なクエリを実行する方法がないのは怖いです。
しかし、もちろん、その結果を得ることはできますが、もう少しコードを書く必要があります。
解決策は2つあります。
質問には詳細があまりないので正確なコードを提供するのは難しいですが、おそらくこれで十分でしょう:)
posts_where
とposts_join
フィルタを使う独自のSQLクエリを書くことを恐れていないのであれば、posts_where
およびposts_join
フィルタを使用してWP_Queryにさらに高度なSQL条件を追加することができます。
生のSQLが気に入らない場合は、2番目のWP_Queryを使用できます。除外するすべての投稿を選択するために使用します。それからあなたはそれらのIDを使用して、あなたの現在のWP_Queryにpost__not_in
パラメータとしてそれらを渡すことができます - この方法であなたはそれらを除外します。