Visualizzare il numero di articoli pubblicati per ogni termine della tassonomia personalizzata?
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();
}
}

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

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

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>"; }

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

@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
