Hace poco me vi en la necesidad de crear un listado de las categorias con la cantidad de entradas de cada categoria, algo asi:

A mi me gusta trabajar con diseños a la medida, por lo que plugins y demas no me sirve, tengo que hacerlo con php… ojo no es queja estoy presumiendo

Para realizarlo me apoye de

get_category_by_slug()

donde necesites mostrar los datos de la categoria puedes implementarlo de la sig. manera:

$slug = 'deportes';
$category = get_category_by_slug($slug);

if ($category) {
echo 'ID de la categoría: ' . $category->term_id . '<br>';
echo 'Nombre de la categoría: ' . $category->name . '<br>';
echo 'Descripción de la categoría: ' . $category->description . '<br>';
echo 'URL de la categoría: ' . get_category_link($category->term_id) . '<br>';
} else {
echo 'La categoría no existe.';
}

Esto nos muestra en la pantalla todos los datos necesarios de la categoria… pero ¿y la cantidad de posteos?; solo es la mitad del requerimiento

para lo siguiente me apoye de un shortcue este codigo de pega en el functions.php de tu template y lueog invocamos el codigo en la vista.

	// 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' );

Yo trabajo separando cada parte de la pagina web en un archivo aparte…

y para invocar el shortcue dentro del archivo widget_sidebar.php

echo do_shortcode( " [category_post_count category =  $slug ]" );

el codigo de arriba nos muestra la cantidad de post de la categoria, que esta guardada en $slug

Para implementarlo con diferentes categorias creo un array y lo recorro obteniendo

  • nombre de categoria
  • Url de categoria
  • cantidad de post por categoria ( este lo obtengo con el shortcue )

El codigo implementado me queda asi:

en el archivo functions.php de tu template:

	// 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' );

En la parte donde quieras mostrar la lista:

        <ul class="list-unstyled">

        <?php
// array con categorias
            $categorias = array("brocal-de-policoncreto", "brocal-de-polietileno", "coladera-pluvial-de-banqueta-de-polietileno", "conexiones-charlotte-dwv","conexiones-para-tubo-corrugado","conexionex-pvc-rd-26	","empaques","fierro-fundido-fo-fo","juntas-gibault","marco-y-tapa-de-polietileno","obras","pead-corrugado-conduit-o-electrico","pegamentos","policoncreto","pvc","tubo-pvc-charlotte","rejilla-boca-de-tormenta-de-polietileno","tubo-pad-pe4710-agua-potable","tubo-pead-corrugado-para-drenaje");

//recorro el array de categorias y obtengo el url + cantidad de post por categoria
            foreach ($categorias as $categoria) {
                $slug = $categoria;
                $category = get_category_by_slug($slug);
                
                if ($category) {
                    echo '<li><a href="'. get_category_link($category->term_id) .'">'. $category->name . ' <span title="'. $category->description . '">'. do_shortcode( " [category_post_count category =  $slug ]" ).'</span></a></li>';
                } else {
                    echo 'La categoría no existe.';
                }                 
             
            }
    
        ?>

        </ul>

Seguramente existen mejores maneras de hacerlo pero a mi me funciono a la perfeccion

El resultado es el siguiente

por g.mtz