Отображение количества опубликованных записей для каждого термина пользовательской таксономии

5 июн. 2014 г., 23:45:42
Просмотры: 22.2K
Голосов: 1

У меня есть пользовательская таксономия "countries". Как мне получить каждый термин (страну) с количеством опубликованных записей в скобках, как показано ниже:

  • Уругвай (3)
  • Чили (5)
  • Таиланд (2)
  • и т.д.

Следующий код показывает общее количество всех терминов в таксономии "countries":

$countries_count = wp_count_terms( 'countries' );
echo $countries_count; // Вывести общее количество терминов

Но я понимаю, что это только начальная точка моей задачи. Есть какие-нибудь предложения?

3
Комментарии

Сейчас у меня нет возможности проверить это, но попробуй получить все термины для "country", а затем пройтись по ним в цикле и получить wp_count_terms для каждого из них. `$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 июн. 2014 г. 00:05:56

@leromt : Пожалуйста, не размещай большие блоки кода в комментариях. Если считаешь, что у тебя есть ответ, опубликуй его в поле для ответов.

s_ha_dum s_ha_dum
6 июн. 2014 г. 00:26:05

@s_ha_dum: Извини, так и сделаю.

leromt leromt
6 июн. 2014 г. 00:27:01
Все ответы на вопрос 3
2

Вы можете использовать get_terms для получения списка всех элементов таксономии. Получив все отдельные элементы, вы можете использовать $term->name для отображения имени элемента и $term->count для получения количества записей внутри этого элемента.

Вот немного изменённая версия кода из кодекса. Вы можете дополнительно модифицировать вывод по своему усмотрению.

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

РЕДАКТИРОВАНО

Спасибо @Traveler, вот ещё одна версия моего кода, если вам нужны кликабельные ссылки.

<?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 июн. 2014 г. 15:18:58
Комментарии

Спасибо за код, он отлично работает! Для тех, кто хочет, чтобы приведённый выше код также был кликабельным и вёл на ссылку каждого термина, используйте следующий код:

<?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 июн. 2014 г. 06:46:20

Добавлю ещё немного информации: если вы включите 'hide_empty=0' сразу после термина 'countries', вы сможете отобразить все результаты. Таким образом, первая строка будет выглядеть так:

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

damienoneill2001 damienoneill2001
27 апр. 2016 г. 14:11:30
0

Вы можете попробовать это с WP Query. Я еще не тестировал этот код, поэтому дайте мне знать, если он сработает.

$query = new WP_Query( array( 'taxonomy' => 'term', 'posts_per_page' => -1 ) ); // Создаем новый запрос WP_Query
$count = $query->post_count; // Получаем количество постов в запросе
6 июн. 2014 г. 00:31:08
2

Я не могу протестировать это прямо сейчас, но попробуй получить все термины для "countries", а затем пройтись по ним в цикле и получить wp_count_terms для каждого из них.

    $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 июн. 2014 г. 06:10:00
Комментарии

Это было решением, спасибо. Было бы полезно указать источник этого кода (Wordpress Codex), как в ответе ниже.

Traveler Traveler
10 июн. 2014 г. 06:37:48

@Traveler: Если это решение, пожалуйста, отметьте его как таковое.

Ссылки на источники:
http://codex.wordpress.org/Function_Reference/get_terms и http://codex.wordpress.org/Function_Reference/wp_count_terms

leromt leromt
10 июн. 2014 г. 17:17:40