Получить количество для всех терминов внутри родительского термина

Вопрос или проблема

Я пытаюсь получить количество постов для термина и его дочерних терминов. Я пробовал это с помощью pad_count=> true, но, похоже, это не имеет эффекта.

Моя структура терминов выглядит следующим образом:

- термин 1: 10 постов
- термин 2: 1 пост
  -- подтермин 1: 4 поста
  -- подтермин 2: 12 постов
- термин 3: 4 поста

Вот мой код:

$args = array(
  'pad_counts' => true
);
$terms = get_terms('category', $args);
foreach($terms as $term) {
  var_dump( $term->count );
}

Для всех терминов без потомков это работает отлично, но для “термина 2” я хочу получить общее количество для него и его детей. В моем примере это будет 17. Однако код возвращает только 1.

Есть советы?

Я не знаю, почему этот код не сработал для вас. Я скопировал этот код, и он работает именно так, как я ожидал. Вам стоит еще раз проверить ваш случай, не удаляли ли вы переменную $args ранее, или попробуйте использовать другое имя (например, $agrs2).

Еще одна проблема в вашем вопросе: если pad_counts не работает, вы получите 1, а не 3.

Ответ или решение

Для того чтобы получить общее количество постов для термина и его дочерних терминов в WordPress, необходимо верно использовать функцию get_terms() с параметром pad_counts. Однако в вашем случае может возникнуть недоразумение о том, как именно работает этот параметр и как он влияет на результат запроса.

Описание проблемы

Ваша текущая структура терминов выглядит таким образом:

- термин 1: 10 постов
- термин 2: 1 пост
  -- подтермин 1: 4 поста
  -- подтермин 2: 12 постов
- термин 3: 4 поста

Вы хотите получить общее количество постов для термина 2, включая посты его подтерминов, что, согласно вашей структуре, должно составлять 17 (1 + 4 + 12). Тем не менее, вы получили только 1.

Потенциальные решения

  1. Свойство pad_counts:
    Убедитесь, что pad_counts установлен в true. Это позволит WordPress возвращать общую информацию о постах для каждого термина, включая счета дочерних терминов.

  2. Код запроса:

    Убедитесь, что ваш запрос на получение терминов правильно оформлен:

    $args = array(
     'taxonomy'   => 'category',
     'orderby'    => 'name',
     'hide_empty' => false,
     'pad_counts' => true // Этот параметр важен
    );
    
    $terms = get_terms($args);
    
    foreach ($terms as $term) {
       echo $term->name . ': ' . $term->count . ' постов' . PHP_EOL;
    }
  3. Проверка кэширования:
    Иногда данные могут кэшироваться, и вам может потребоваться сбросить кэш, чтобы увидеть обновленные данные, особенно если вы добавляли или удаляли посты.

  4. Проверка структуры терминов:
    Убедитесь, что ваши терминальные структуры действительно соответствуют друг другу. Возможно, ваши подтермины не правильно связаны с родительским термином.

  5. Кастомная функция для подсчета:
    Если pad_counts по каким-то причинам не дает желаемого результата, можно использовать кастомную функцию для рекурсивного подсчета постов:

    function get_term_post_count($term_id) {
       $term = get_term($term_id);
       $count = $term->count;
    
       $children = get_terms(array(
           'taxonomy' => $term->taxonomy,
           'child_of' => $term_id,
           'hide_empty' => false,
       ));
    
       foreach ($children as $child) {
           $count += get_term_post_count($child->term_id);
       }
    
       return $count;
    }
    
    foreach ($terms as $term) {
       $total_count = get_term_post_count($term->term_id);
       echo $term->name . ': ' . $total_count . ' постов' . PHP_EOL;
    }

Заключение

Исходя из вышесказанного, перепроверьте ваш код и структуру терминов, чтобы гарантировать, что вы получаете верные данные. Использование указанной выше функции должно помочь вам получить правильные результаты для термина и его дочерних терминов. Если проблема сохранится, попробуйте проверить другие аспекты вашей настройки WordPress или обратиться к документации для дополнительных параметров и возможностей.

Оцените материал
Добавить комментарий

Капча загружается...