¿Cómo mostrar el número de entradas publicadas para cada término de taxonomía personalizada?
Tengo una taxonomía personalizada llamada "countries" (países). ¿Cómo puedo obtener cada término (país) con el número de sus entradas publicadas entre paréntesis, como se muestra a continuación:
- Uruguay (3)
- Chile (5)
- Thailand (2)
- etc.
Con el siguiente código se muestra el número total de términos en la taxonomía "countries":
$countries_count = wp_count_terms( 'countries' );
echo $countries_count;
Pero sé que esto es solo el punto de partida de mi problema. ¿Alguna sugerencia?
Puedes usar get_terms
para obtener la lista de todos los términos asociados a una taxonomía. Una vez que tienes todos los términos separados, puedes usar $term->name
para mostrar el nombre del término y $term->count
para recuperar la cantidad de posts dentro de ese término específico.
Aquí hay una versión ligeramente modificada del código encontrado en el codex. Puedes modificar aún más la salida según lo necesites.
<?php
$terms = get_terms('countries');
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
echo '<ul>';
foreach ( $terms as $term ) {
echo '<li>' . $term->name . ' (' . $term->count . ')' . '</li>';
}
echo '</ul>';
}
?>
EDITADO
Gracias a @Traveler, aquí hay otra versión de mi código si necesitas que los enlaces sean cliqueables.
<?php
$terms = get_terms('countries');
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
echo '<ul>';
foreach ( $terms as $term ) {
$term = sanitize_term( $term, 'countries' );
$term_link = get_term_link( $term, 'countries' );
echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . ' (' . $term->count . ')' . '</a></li>';
}
echo '</ul>';
}
?>

¡Gracias por el código, funciona genial! Para todos los que quieran que el código anterior también sea clickable con el enlace de cada término, usa el siguiente código:
<?php
$terms = get_terms('countries');
if ( !empty( $terms ) && !is_wp_error( $terms ) ){ echo '<ul>'; foreach ( $terms as $term ) { $term = sanitize_term( $term, 'countries' ); $term_link = get_term_link( $term, 'countries' ); echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . ' (' . $term->count . ')' . '</a></li>'; } echo '</ul>'; } ?>

No puedo probar esto ahora mismo, pero intenta obtener todos los términos para "países" y luego recórrelos para obtener el wp_count_terms de cada uno.
$terms = get_terms("countries");
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
echo "<ul>";
foreach ( $terms as $term ) {
$args = array( 'slug' => $term->slug, );
echo "<li>" . $term->name . "(" . wp_count_terms('countries', $args) . ")</li>";
}
echo "</ul>"; }

Esta fue la solución, gracias. Sería útil compartir la fuente de este código (Wordpress Codex) como en la respuesta de abajo.

@Traveler : Si esta es la solución, por favor márcala como tal.
Las referencias son:
http://codex.wordpress.org/Function_Reference/get_terms
y
http://codex.wordpress.org/Function_Reference/wp_count_terms
