Afișarea numărului de articole publicate pentru fiecare termen din taxonomia personalizată?

5 iun. 2014, 23:45:42
Vizualizări: 22.2K
Voturi: 1

Am o taxonomie personalizată numită "countries". Cum pot obține fiecare termen (țară) cu numărul articolelor sale publicate în paranteze, ca în exemplul următor:

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

Cu următorul cod este afișat numărul total de termeni din taxonomia "countries":

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

Dar știu că acesta este doar punctul de plecare al problemei mele. Aveți sugestii?

3
Comentarii

Nu pot testa acum, dar încearcă să obții toți termenii pentru "țară" și apoi să-i parcurgi și să obții wp_count_terms pentru fiecare dintre ei. `$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 iun. 2014 00:05:56

@leromt : Te rog să nu postezi blocuri mari de cod în comentarii. Dacă crezi că ai un răspuns, postează-l în caseta de răspuns.

s_ha_dum s_ha_dum
6 iun. 2014 00:26:05

@s_ha_dum: Scuze, voi face așa.

leromt leromt
6 iun. 2014 00:27:01
Toate răspunsurile la întrebare 3
2

Puteți folosi get_terms pentru a obține lista tuturor termenilor asociați cu o taxonomie. După ce aveți toți termenii separați, puteți folosi $term->name pentru a afișa numele termenului și $term->count pentru a obține numărul de articole din acel termen specific.

Iată o versiune ușor modificată a codului găsit în codex. Puteți modifica în continuare rezultatul conform nevoilor dumneavoastră.

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

EDITARE

Mulțumită lui @Traveler, iată o altă versiune a codului meu dacă aveți nevoie ca linkurile să fie accesibile.

<?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 iun. 2014 15:18:58
Comentarii

Mulțumesc pentru cod, funcționează excelent! Pentru toți cei care doresc ca codul de mai sus să fie și clickabil către link-ul fiecărui termen, folosiți următorul cod:

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

Doar pentru a adăuga puțin mai mult, dacă includeți 'hide_empty=0' imediat după termenul 'countries', veți putea afișa toate rezultatele. Deci prima linie va arăta astfel:

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

damienoneill2001 damienoneill2001
27 apr. 2016 14:11:30
0

Poți încerca cu WP Query. Nu l-am testat încă, așa că te rog să îmi spui dacă funcționează.

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

Nu pot testa acum, dar încearcă să obții toți termenii pentru "countries" (țări) și apoi să parcurgi fiecare dintre ei pentru a obține wp_count_terms pentru fiecare în parte.

    $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 iun. 2014 06:10:00
Comentarii

Aceasta a fost soluția, mulțumesc. Ar fi fost util să menționați sursa acestui cod (Wordpress Codex) ca în răspunsul de mai jos.

Traveler Traveler
10 iun. 2014 06:37:48

@Traveler : Dacă aceasta este soluția, te rog să o marchezi ca atare.

Referințele sunt:
http://codex.wordpress.org/Function_Reference/get_terms și http://codex.wordpress.org/Function_Reference/wp_count_terms

leromt leromt
10 iun. 2014 17:17:40