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