Lors de la mise à niveau de notre portefeuille, je recherche quelque chose qui indique le nombre de messages dans une catégorie (actuelle) d'un type de message.
Exemple: j'ai une catégorie avec 'caractéristiques'. Chaque fonctionnalité possède sa propre description, une page relative aux applications et au blog.
Je vais chercher la catégorie actuelle avec:
<?php $cat_id = get_query_var('cat'); ?>
et obtenir des messages avec:
<?php query_posts("post_type=apps&cat=$cat_id&showposts=3");?>
Comment est-il possible de compter les publications de post_type = apps et category = $ cat_id?
Je suis désolé de mon manque d’expérience PHP/WP. Est-ce que quelqu'un sait comment faire fonctionner ces 2 choses?
Merci d'avance.
category
est une taxonomie déjà intégrée. Par conséquent, il est assez facile de compter son terme avec get_terms( $tax, array( /* args */ ) );
$terms = get_terms( 'category', array(
'fields' => 'count',
) );
Cela fera une requête COUNT (*)
assez rapide afin que vous n'ayez pas à vous soucier des performances.
Vous pouvez également faire un appel normal à get_terms()
, puis modifier la selects
avec le filtre:
// The core filter:
apply_filters( 'get_terms_fields', $selects, $args )
// Example callback:
add_action( 'get_terms_fields', 'wpse105174_get_terms_fields_cb', 10, 2 );
function wpse105174_get_terms_fields_cb( $selects, $args )
{
return array( 't.term_id', 'COUNT(*)' );
}
... où $selects
est un tableau (qui sera implosé dans une chaîne séparée par des virgules).
Vous pouvez ensuite modifier davantage la requête et la limiter à certaines catégories spécifiques (termes/taxons) avec un WHERE t.slug = whatever
// The core filter:
apply_filters( 'terms_clauses', compact( $pieces ), $taxonomies, $args );
// Example callback:
add_action( 'terms_clauses', 'wpse105174_terms_clauses_cb', 10, 3 );
function wpse105174_terms_clauses_cb( $pieces, $taxonomies, $args )
{
$pieces['where'] = " WHERE t.slug = whatever";
// Or do some `str_replace`, `preg_replace`, whatever fits in here
return $pieces;
}
Vous pouvez également définir le $pieces['join'] = '';
si vous n'avez pas besoin d'accéder à la table term_taxonomy
-.
Enfin, vous pouvez utiliser l’API Transients pour enregistrer vos résultats (sous forme de tableau sérialisé) dans la base de données. Ainsi, vous n’avez pas à interroger le nombre à chaque fois que vous en avez besoin.
Le nombre de messages est mis en cache dans l'objet catégorie pour des choses comme celle-ci. Dans cette catégorie, quelque chose comme ceci devrait être plus simple:
$category = get_queried_object();
// $category->count has count
Si vous essayez de récupérer toutes les publications de la catégorie via cette boucle, vous devez utiliser posts_per_page=-1
, -1
pour tout et posts_per_page
est un remplacement plus récent de showposts
.
Pour créer des liens vers les archives de catégories, vous pouvez utiliser get_category_link()
function.
J'ai eu quelques problèmes au début, mais cela fonctionne pour moi:
<?php $posts = get_posts("post_type=apps&cat=$cat_id");
$count = count($posts);
echo "$count";
?>