web-dev-qa-db-fra.com

Comment obtenir le nombre de postes affectés à une catégorie donnée?

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.

1
NielsPilon

Eh bien ... C'est assez facile à expliquer ...

Explication du problème

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.

Solution

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
}

Meilleure solution

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.

2
Krzysiek Dróżdż