J'ai le code suivant pour compter le nombre de messages dans une catégorie spécifique. Basé sur le nombre de messages qu’il renvoie, il devrait faire quelque chose.
$args = array(
'posts_per_page' => -1,
'post_type' => 'post',
'cat' => '9',
);
$count_query = new WP_Query( $args );
$count = $count_query->post_count;
if ( $count >= 3) {
// do something
}
Ce code fonctionne, mais seulement si j'inclus posts_per_page
dans mon tableau. Quelqu'un peut-il m'expliquer pourquoi?
Je m'attendais également à ce que le code fonctionne sans le post_per_page
. Au lieu de cela, il renvoie 0 comme résultat.
Eh bien ... C'est assez facile à expliquer ...
Votre code ne compte rien - il récupère les publications qui correspondent à la requête donnée (vous interrogez les publications de la catégorie avec l'ID 9). Si vous ne fournissez aucun paramètre posts_per_page
, la valeur par défaut est utilisée (celle définie dans Paramètres). D'autre part, si vous définissez posts_per_page
sur -1
, vous obtiendrez toutes les publications qui correspondent à la requête donnée. Mais cela est une très mauvaise idée - s'il y a des milliers de messages, vous les récupèrerez tous de DB simplement pour les compter.
Une façon de résoudre ce problème serait de vérifier found_posts
au lieu de post_count
. Le premier est "Le nombre total de messages trouvés correspondant aux paramètres de la requête en cours" et le second "Le nombre de messages affichés".
$args = array(
'post_type' => 'post',
'cat' => 9,
);
$count_query = new WP_Query( $args );
$count = $count_query->found_posts;
if ( $count >= 3) {
// do something
}
Mais ... Il existe un moyen beaucoup plus efficace de comptabiliser le nombre de messages dans une catégorie donnée ...
$category = get_category( 9 ); // <- change the ID of category
if ( $category->category_count >= 3 ) {
// do something
}
Bien sûr, vous devriez également vérifier si la catégorie donnée existe et ainsi de suite.