Visualizzare il numero di articoli pubblicati per ogni termine della tassonomia personalizzata?

5 giu 2014, 23:45:42
Visualizzazioni: 22.2K
Voti: 1

Ho una tassonomia personalizzata chiamata "countries". Come posso ottenere ogni termine (paese) con il numero dei suoi articoli pubblicati tra parentesi, come il seguente:

  • Uruguay (3)
  • Chile (5)
  • Thailand (2)
  • etc.

Con il seguente codice viene visualizzato il numero di tutti i termini nella tassonomia "countries":

$countries_count = wp_count_terms( 'countries' );
echo $countries_count; // Mostra il numero totale di termini

Ma so che questo è solo il punto di partenza del mio problema. Qualche suggerimento?

Ecco una soluzione completa per ottenere ciò che desideri:

$terms = get_terms( array(
    'taxonomy' => 'countries',
    'hide_empty' => false
) );

if ( !empty($terms) && !is_wp_error($terms) ) {
    foreach ( $terms as $term ) {
        $args = array(
            'post_type' => 'post',
            'post_status' => 'publish',
            'tax_query' => array(
                array(
                    'taxonomy' => 'countries',
                    'field' => 'term_id',
                    'terms' => $term->term_id
                )
            )
        );
        $query = new WP_Query($args);
        echo $term->name . ' (' . $query->found_posts . ')<br>';
        wp_reset_postdata();
    }
}
3
Commenti

Non posso testarlo ora, ma prova a ottenere tutti i termini per "country" e poi scorrilo e ottieni wp_count_terms per ognuno di essi. `$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 giu 2014 00:05:56

@leromt : Per favore non postare grandi blocchi di codice nei commenti. Se pensi di avere una risposta, postala nel box delle risposte.

s_ha_dum s_ha_dum
6 giu 2014 00:26:05

@s_ha_dum: Scusa, lo farò.

leromt leromt
6 giu 2014 00:27:01
Tutte le risposte alla domanda 3
2

Puoi utilizzare get_terms per ottenere l'elenco di tutti i termini associati a una tassonomia. Una volta ottenuti tutti i termini separati, puoi usare $term->name per visualizzare il nome del termine e $term->count per recuperare il numero di articoli all'interno di quel termine specifico.

Ecco una versione leggermente modificata del codice presente nel codex. Puoi modificare ulteriormente l'output in base alle tue esigenze.

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

MODIFICA

Grazie a @Traveler, ecco un'altra versione del mio codice se hai bisogno che i link siano cliccabili.

<?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 giu 2014 15:18:58
Commenti

Grazie per il codice, funziona benissimo! Per tutti coloro che vogliono che il codice sopra sia anche cliccabile per il link di ogni termine, utilizzate il seguente codice:

<?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 giu 2014 06:46:20

Per aggiungere un po' di più, se includi 'hide_empty=0' subito dopo il termine 'countries', sarai in grado di mostrare tutti i risultati. Quindi la prima riga diventerà:

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

damienoneill2001 damienoneill2001
27 apr 2016 14:11:30
0

Puoi provarlo con WP Query. Non l'ho ancora testato, quindi fammi sapere se funziona.

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

Non posso testarlo adesso, ma prova a ottenere tutti i termini per "countries" e poi scorrilo per ottenere wp_count_terms per ognuno di essi.

    $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 giu 2014 06:10:00
Commenti

Questa era la soluzione, grazie. Sarebbe utile condividere la fonte di questo codice (Wordpress Codex) come nella risposta qui sotto.

Traveler Traveler
10 giu 2014 06:37:48

@Traveler : Se questa è la soluzione, per favore contrassegnala come tale.

I riferimenti sono:
http://codex.wordpress.org/Function_Reference/get_terms e http://codex.wordpress.org/Function_Reference/wp_count_terms

leromt leromt
10 giu 2014 17:17:40