web-dev-qa-db-fra.com

Compter le nombre d'articles dans une catégorie et ses sous-catégories et afficher le résultat à l'aide d'un shortcode

J'essaie de créer un shortcode pour afficher le nombre d'articles dans une catégorie. J'ai réussi à utiliser ceci avec ce code:

// Add Shortcode to show posts count inside a category
function add_count_of_posts_in_category() {
$term = get_term( 7, 'category' ); 
$count = $term->count;
echo $count;
}
add_shortcode( 'show-posts-count', 'add_count_of_posts_in_category' );

Cependant, cela signifie que je dois spécifier la ID de la catégorie pour que le shortcode fonctionne. Ce qui signifie que je dois créer un shortcode par catégorie, ce qui est inutile.

J'essaie de trouver un moyen de modifier la partie ID de catégorie avec une variable, de sorte que je puisse utiliser le code court comme ceci: [show-posts-count="cars"] pour afficher le nombre d'articles dans la catégorie appelée voitures. Je ne peux pas trouver un moyen de le faire.

Votre aide est tres apprecie.

EDIT: 29/09/2016 Après avoir fait fonctionner le code, j'essaie d'étendre la fonction pour compter également les messages de la catégorie enfant.

Donc, si la catégorie principale n'a pas de messages, mais a 2 sous-catégories, chacune a des messages, puis lorsque j'utilise le shortcode de la catégorie principale, le nombre affiché est la somme de tous les messages de la catégorie principale (le cas échéant), en Outre le nombre de postes dans les sous-catégories et les sous-sous-catégories, etc.

J'ai essayé d'utiliser get_term_children( $term, $taxonomy );, mais je ne savais pas comment obtenir le nombre de posts de sous-catégories, puis les additionner.

1
Atef Wagih

Le shortcode

// Add Shortcode to show posts count inside a category
function category_post_count( $atts ) {

    $atts = shortcode_atts( array(
        'category' => null
    ), $atts );

    // get the category by slug.
    $term = get_term_by( 'slug', $atts['category'], 'category');

    return ( isset( $term->count ) ) ? $term->count : 0;
}
add_shortcode( 'category_post_count', 'category_post_count' );

Usage

[category_post_count category="category_slug_or_name"]

Si vous voulez obtenir le nombre par nom, pas de slug, changez ceci

$term = get_term_by( 'slug', $atts['category'], 'category');

pour ça:

$term = get_term_by( 'name', $atts['category'], 'category');
2
Ahmed Fouad

Pour compter les publications dans les sous-catégories en plus de la catégorie spécifiée, une possibilité consiste à interroger les publications à l'aide d'une option cat et à compter les résultats. L'option cat interroge les publications dans les catégories enfants par défaut.

add_shortcode('category_post_count', function ($atts, $content) {
    $atts = shortcode_atts([
        'category' => 0
    ], $atts);
    $cat_id = is_numeric($atts['category']) ?
        intval($atts['category']) :
        get_category_by_slug($atts['category'])->term_id;
    return count(get_posts([
        'nopaging' => true,
        'fields' => 'ids',
        'cat' => $cat_id
    ]));
});

Il existe des exemples d'interrogation des catégories enfants et de synthèse des champs count, mais cela peut produire des résultats incorrects si une publication appartient à plus d'une des catégories correspondantes.

0
Joe