J'ai donc une requête personnalisée qui récupère tous les messages dans une catégorie donnée. J'essaie d'obtenir le nombre de lignes renvoyées, mais cela ne me donne pas le bon nombre.
Au lieu de 11, j'en reçois 14. Quelqu'un sait-il pourquoi?
<?php
$pageposts = $wpdb->get_results($wpdb->prepare("
SELECT * FROM $wpdb->posts
LEFT JOIN userContests ON ($wpdb->posts.ID = userContests.contestID)
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)
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->term_taxonomy.term_id IN(3)
ORDER BY $wpdb->posts.post_date DESC
"), OBJECT);
/* $rows = $wpdb->num_rows; <------ Wrongly returns 14 */
/* $rows = $wpdb->get_var($wpdb->prepare(" <--------- Correctly returns 11
SELECT COUNT(*) FROM $wpdb->posts
LEFT JOIN userContests ON ($wpdb->posts.ID = userContests.contestID)
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)
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->term_taxonomy.term_id IN(3)
ORDER BY $wpdb->posts.post_date DESC")); */
echo "Number of rows = " .$rows;
?>
Mon travail semble être un gaspillage de ressources. Y a-t-il quelque chose de plus efficace?
Si vous voulez le nombre total de tous les articles publiés dans une catégorie particulière, vous pouvez essayer ceci.
$all_posts = new WP_Query( array( 'posts_per_page' => -1, 'post_status' => 'publish', 'cat' => 3 ) );
echo $all_posts->post_count;
ou
$all_posts = new WP_Query( array( 'posts_per_page' => -1, 'post_status' => 'publish', 'category_name' => 'uncategorized' ) );
echo $all_posts->post_count;
Assurez-vous simplement de remplacer le 'category_name' ou le 'chat' par la catégorie souhaitée.