web-dev-qa-db-fra.com

Afficher le nombre de publications pour chaque terme de taxonomie personnalisé?

J'ai une taxonomie personnalisée appelée "pays". Comment puis-je obtenir chaque terme (pays) avec le nombre de publications publiées entre parenthèses, comme suit:

  • Uruguay (3)
  • Chili (5)
  • Thaïlande (2)
  • etc.

Avec le code suivant, le nombre de termes de la taxonomie "pays" est affiché:

$countries_count = wp_count_terms( 'countries' );
echo $countries_count; 

Mais je sais juste que ce n’est que le point de départ de mon problème. Aucune suggestion?

1
Traveler

Vous pouvez utiliser get_terms pour obtenir la liste de tous les termes associés à une taxonomie. Une fois que vous avez tous les termes séparés, vous pouvez utiliser $term->name pour afficher le nom du terme et $term->count pour récupérer le nombre de publications à l'intérieur de ce terme spécifique.

Voici une version légèrement modifiée du code contenu dans le codex. Vous pouvez ensuite modifier la sortie selon vos besoins

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

EDIT

Grâce à @Traveler, voici une autre version de mon code si vous souhaitez que les liens soient cliquables.

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

?> 
1
Pieter Goosen

Vous pouvez l'essayer avec WP Query. Je ne l'ai pas encore testée, alors faites-le-moi savoir si cela fonctionne.

$query = new WP_Query( array( 'taxonomy' => 'term', 'posts_per_page' => -1 ) );
$count = $query->post_count;
0
Alex Dumitru

Je ne peux pas tester cela pour le moment, mais essayez d'obtenir tous les termes pour "pays", puis parcourez-les et obtenez le wp_count_terms pour chacun d'entre eux.

    $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>"; }
0
leromt