例を挙げれば簡単です。
カスタム投稿タイプMYPOSTTYPEがあり、3つの分類法 TAX_1 、 TAX_2 があります。 TAX_3
用語が3つある場合: TAX_1 の 'TERM_TAX_1'、 TAX_2 の 'TERM_TAX_2'、の 'TERM_TAX_3' ] TAX_3 、SQLクエリと$ wpdbを使用して、3つの用語すべてを持つMYPOSTTYPEの数をどのように数えることができますか?
私はこのような何かを試してみましたが、それは動作していません...カウンターは常に0です
SELECT COUNT($wpdb->posts.ID) AS counter
FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms AS tax_one ON ($wpdb->term_taxonomy.term_id = tax_one.term_id)
LEFT JOIN $wpdb->terms AS tax_two ON ($wpdb->term_taxonomy.term_id = tax_two.term_id)
LEFT JOIN $wpdb->terms AS tax_three ON ($wpdb->term_taxonomy.term_id = tax_three.term_id)
WHERE 1=1
AND $wpdb->posts.post_type = 'MYPOSTTYPE'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->term_taxonomy.taxonomy IN ('TAX_1', 'TAX_2', 'TAX_3')
AND tax_one.slug = 'TERM_TAX_1'
AND tax_two.slug = 'TERM_TAX_1'
AND tax_three.slug = 'TERM_TAX_1'
UPDATE: tax_query でも試しましたが、この問題がありました get_postsの問題、 tax_queryと投稿数のカウント
だから私はデータベースに直接クエリを実行しようとしたかった
tax-query を実行してから、結果をcount
にします。何十ものJOINS
を持つカスタムクエリは必要ありません。
$posts = new WP_Query( array(
'post_type' => 'MYPOSTTYPE',
'tax_query' => array(
array(
'taxonomy' => 'TAX_1',
'field' => 'slug',
'terms' => array( 'TERM_TAX_1' ),
'operator' => 'IN'
),
array(
// etc.
)
),
'post_status' => 'publish'
);
prinft(
'<h3>COUNT: %s</h3>'
,count( $posts )
);
MySQLではwhere句にクエリをネストすることができるので、このようなクエリでもうまくいくはずです。
SELECT COUNT($wpdb->posts.ID) AS counter
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
$wpdb->term_taxonomy.taxonomy = 'TAX_1'
AND $wpdb->terms.slug = 'TERM_TAX_1'
AND $wpdb->posts.ID IN ( SELECT $wpdb->posts.ID
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
$wpdb->term_taxonomy.taxonomy = 'TAX_2'
AND $wpdb->terms.slug = 'TERM_TAX_2'
AND $wpdb->posts.ID IN ( SELECT $wpdb->posts.ID
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
$wpdb->posts.post_type = 'MYPOSTTYPE'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->term_taxonomy.taxonomy = 'TAX_3'
AND $wpdb->terms.slug = 'TERM_TAX_3'
))