こんにちは
基本的な内容で恐縮です。
meta_queryなのですが、下記のようにセットしたところ、例えば1つの記事で、二つの条件ともにマッチした場合に、記事数が二重にカウントされています。
どちらの条件にもマッチする場合には、メタキー1bbの条件のみカウントさせるということはできるものでしょうか。
<?php $args = array( 'category_name' => $cat, 'posts_per_page' => -1, 'post_type' => 'post', 'post_status' => 'publish', 'meta_query' => array( 'relation' => 'or', array( 'key'=> '1bb', 'value' => array($from , $to), 'compare' => 'BETWEEN', 'type' => 'DATE', ), array( 'key'=> '1aa', 'value' => array($from , $to), 'compare' => 'BETWEEN', 'type' => 'DATE', ), ), ); echo count( get_posts( $args ) ); ?>
追記です
1aaだけマッチするときの条件、1bbだけマッチするときの条件、1aaも1bbも両方マッチするときの条件、といった3つのmeta_queryを仮にセットしてみましたが、表示ができないほど読み込みに時間がかかってしまい、ダメでした。
'meta_query' => array( 'relation' => 'or', array( 'relation' => 'AND', array( array( 'key'=> '1aa', 'value' => array($from , $to), 'compare' => 'BETWEEN', 'inclusive' => 'true', 'type' => 'DATE', ), array( 'key' => '1bb', 'compare' => 'NOT EXISTS', ), ), ), array( 'relation' => 'AND', array( array( 'key'=> '1bb', 'value' => array($from , $to), 'compare' => 'BETWEEN', 'inclusive' => 'true', 'type' => 'DATE', ), array( 'key' => '1aa', 'compare' => 'NOT EXISTS', ), ), ), array( 'relation' => 'AND', array( array( 'key'=> '1bb', 'value' => array($from , $to), 'compare' => 'BETWEEN', 'inclusive' => 'true', 'type' => 'DATE', ), array( 'key' => '1aa', 'compare' => 'EXISTS', ), array( 'key' => '1bb', 'compare' => 'EXISTS', ), ), ), ),
wp_query->get_postsはGROUP BY {$wpdb->posts}.ID して
post_idを重複なく取得した後にそのIDからpostデータを取得するという処理をしています
通常重複するはずがありません
一度get_postsで取得された内容を精査してください
ありがとうございます。いただいたコメントを元に解決することができました。メタキーの 1aaと1bbが、それぞれ違う月をバリューとするとき、3か月分を1か月ごとに記事数をとると、複数の月でカウントされますが、まとめて記事数をとると、1カウント分のみでした。月ごとに個別にカウントしたせいで重複していました。
回答1件
あなたの回答
tips
プレビュー