¿Cómo mostrar el número de entradas publicadas para cada término de taxonomía personalizada?

5 jun 2014, 23:45:42
Vistas: 22.2K
Votos: 1

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?

3
Comentarios

No puedo probar esto ahora mismo, pero intenta obtener todos los términos para "country" y luego recorrerlos obteniendo wp_count_terms para 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>";
 }'
leromt leromt
6 jun 2014 00:05:56

@leromt: Por favor no publiques bloques grandes de código en los comentarios. Si crees que tienes una respuesta, publícala en el cuadro de respuestas.

s_ha_dum s_ha_dum
6 jun 2014 00:26:05

@s_ha_dum: Lo siento, lo haré.

leromt leromt
6 jun 2014 00:27:01
Todas las respuestas a la pregunta 3
2

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 . '&nbsp;(' . $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 . '&nbsp;(' . $term->count . ')' . '</a></li>'; 
  } 
  echo '</ul>';
  }

?> 
6 jun 2014 15:18:58
Comentarios

¡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>'; } ?>

Traveler Traveler
10 jun 2014 06:46:20

Solo para agregar un poco más, si incluyes 'hide_empty=0' justo después del término 'countries', podrás mostrar todos los resultados. Así que la primera línea quedará:

$terms = get_terms('countries', 'hide_empty=0');

damienoneill2001 damienoneill2001
27 abr 2016 14:11:30
0

Puedes probarlo con WP Query. Todavía no lo he probado, así que por favor házme saber si funciona.

$query = new WP_Query( array( 'taxonomy' => 'term', 'posts_per_page' => -1 ) );
$count = $query->post_count;
6 jun 2014 00:31:08
2

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>"; }
6 jun 2014 06:10:00
Comentarios

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 Traveler
10 jun 2014 06:37:48

@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

leromt leromt
10 jun 2014 17:17:40