Вопрос или проблема
Я пытаюсь получить количество постов для термина и его дочерних терминов. Я пробовал это с помощью 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.
Потенциальные решения
-
Свойство
pad_counts
:
Убедитесь, чтоpad_counts
установлен вtrue
. Это позволит WordPress возвращать общую информацию о постах для каждого термина, включая счета дочерних терминов. -
Код запроса:
Убедитесь, что ваш запрос на получение терминов правильно оформлен:
$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; }
-
Проверка кэширования:
Иногда данные могут кэшироваться, и вам может потребоваться сбросить кэш, чтобы увидеть обновленные данные, особенно если вы добавляли или удаляли посты. -
Проверка структуры терминов:
Убедитесь, что ваши терминальные структуры действительно соответствуют друг другу. Возможно, ваши подтермины не правильно связаны с родительским термином. -
Кастомная функция для подсчета:
Если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 или обратиться к документации для дополнительных параметров и возможностей.