C'est plus facile si je fais un exemple:
J'ai un type de message personnalisé MYPOSTTYPE, avec 3 taxonomies TAX_1 , TAX_2 et TAX_3
Si j'ai 3 termes: 'TERM_TAX_1' dans TAX_1 , 'TERM_TAX_2' dans TAX_2 et 'TERM_TAX_3' dans TAX_3 , comment puis-je compter le nombre de MYPOSTTYPE ayant les 3 termes avec une requête SQL et $ wpdb?
J'ai essayé avec quelque chose comme ça, mais ça ne marche pas ... le compteur est toujours à 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: J'ai aussi essayé avec tax_query , mais j'ai eu ce problème Problème avec get_posts, tax_query et compter le nombre de messages
donc je voulais essayer de faire une requête directement à la base de données
Effectuez une taxe-interrogation puis count
le résultat. Pas besoin d'une requête personnalisée avec des dizaines de 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 )
);
Puisque MySQL permet d'imbriquer des requêtes dans une clause where, je pense qu'une requête comme celle-ci devrait fonctionner
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'
))