Intereting Posts
Подробная информация о wp_localize_script Как защитить страницы с двойной аутентификацией: пароль + адрес электронной почты (в настраиваемом поле) Пользовательская регистрация и формы входа с подтверждением reCaptcha 2 Как добавить кнопку главного меню, которая перенаправляется на другой сайт или поддомен? Добавить пользовательские поля в шаблон страницы, администратор Получите slug, чтобы указать на другой контент того же сообщения Поместите статические HTML-файлы в путь ниже страницы WordPress Какая самая простая тема для WordPress использовать ее в качестве базы? Меню / меню подменю WordPress При использовании wp_enqueue_script (); в теме почему мы не используем add_action? Вперед и замаскируйте веб-сайт WordPress Шаблон таксономии пользовательских сообщений Пользовательский почтовый контент для отображения в обычной почте? Почему бы не сменить дочернюю тему на обычную тему, пропустить шаблон? ошибка Как использовать get_template_part всегда относительно файла, в котором я его использую?

Категория и число детей

У меня есть ситуация, когда я не могу получить правильное количество сообщений из категории … и я пробовал все, кроме настройки wp_list_categories с помощью walker.

Итак, у меня есть иерархия категорий:

cat1 cat2 (total 8) cat3 (total 5) cat4 (total 3) 

Все сообщения находятся под cat2 и cat3-cat4. Я показываю cat1 и хочу показать количество сообщений.

Если я использую следующую функцию:

 function wp_get_postcount($id) { //return count of post in category child of ID 15 $count = 0; $taxonomy = 'category'; $args = array('child_of' => $id); $tax_terms = get_terms($taxonomy,$args); foreach ($tax_terms as $tax_term) { $count +=$tax_term->count; } return $count; } 

Я получаю общее количество 16. Который удваивает реальную сумму, очевидно, рассчитывая дважды.

До этого я пробовал:

 $children_cats = get_categories(array( 'hide_empty' => 0, 'taxonomy' => 'category', )); 

И используется foreach на массиве и эхо-счете. Но он вернет 0, очевидно, потому что у родительского кота нет сообщений, выбранных под ним …

На самом деле wp_list_categories отображает правильное значение. Но я не смог его продлить, поэтому я получил бы свой сложный html:

 <li> <a class="subcatimg" href="<?php echo $cat_link; ?>"><?php if (function_exists('get_cat_icon_lite')) echo get_cat_icon_lite( $child->cat_ID );?><span><?php _e('Show All','medishop'); ?></span></a> <h4><a href="<?php echo $cat_link; ?>"><?php echo $child->name; ?></a></h4> <p><span><?php echo wp_get_postcount($child->cat_ID); ?></span> <?php _e('products in this category','medishop'); ?></p> </li> 

У меня действительно нет вариантов. Любой совет?

Solutions Collecting From Web of "Категория и число детей"

Проверяя код Daniel Llewellyn и ссылку WP_Query WordPress, я понял, что нам нужно передать массив массива в параметр tax_query. В противном случае он просто вернет все столбцы.

Вот небольшой модифицированный код:

 if ( ! function_exists( 'ipt_kb_total_cat_post_count' ) ) : /** * Simple function to get category post count including all subcategories * * @link http://wordpress.stackexchange.com/a/91551 Stackexchange * @param int $cat_id Category ID * @return int Total post count */ function ipt_kb_total_cat_post_count( $cat_id ) { $q = new WP_Query( array( 'nopaging' => true, 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'id', 'terms' => $cat_id, 'include_children' => true, ), ), 'fields' => 'ids', ) ); return $q->post_count; } endif; 

Надеюсь, это помогает кому-то вроде меня.

Я получаю общее количество 16. Который удваивает реальную сумму, очевидно, рассчитывая дважды.

Свойство count вернет количество сообщений в этой конкретной категории. Вы получаете 16, потому что эти сообщения имеют как cat3 и cat4 и родительскую категорию ( cat2 ), назначенные им, и вы добавляете счетчики.

Предполагая, что вы используете эту функцию, например wp_get_postcount($id_of_cat2) , просто верните свойство count:

 $term = get_term((int)$id, $taxonomy); if(!($term instanceof WP_Error)) return (int)$term->count; // or show the error... return 0; 

(Это то же самое, что и $child->count в вашем коде ниже)

Но если вы пытаетесь получить количество сообщений о всех дочерних категориях cat1 , например wp_get_postcount($id_of_cat1) , которые согласно этой иерархии категорий не имеют каких-либо должностей, назначенных ему, затем добавьте количество отсчетов со второго уровня , Ваша функция, похоже, делает именно это.

пытаться:

 function wp_get_postcount($id) { //return count of post in category child of ID 15 $q = new WP_Query(array( 'nopaging' => true, 'tax_query' => array( 'taxonomy' => 'category', 'field' => 'id', 'terms' => $id, 'include_children' => true, ))); return $q->post_count; } 

caveat: Я не проверял это.

Это не идеальное решение, но может работать как быстрое решение, в зависимости от ваших потребностей.

К сожалению, способ WordPress делает эту математику, я не думаю, что «child_of» – это то, как вы хотите. Однако вы можете просто выбрать cat1 как категорию на соответствующих постах.

Сначала отредактируйте сообщения в категориях 3 и 4 и измените их:

 cat1 [] cat2 [x] cat3 [x] cat4 [] 

к этому:

 cat1 [x] cat2 [x] cat3 [x] cat4 [] 

Затем исправьте свой код, чтобы просто подсчитать количество сообщений в cat1, а не всех его дочерних элементов.

У меня была связанная с этим проблема, и я решил ее таким образом. Это не рекомендуется в любой ситуации, потому что он сломается, если пользователь не будет правильно выбирать категории. Тем не менее, используется правильно, и он исправит проблему с расчетом.

Кроме того, если все сообщения являются дочерними элементами cat1 по умолчанию, чтобы помочь пользователю в этом экземпляре, вы можете изменить категорию по умолчанию на «cat1» для всех новых сообщений.

 Settings > Writing. 

Я понимаю, что все должности присваиваются категории третьего уровня (например, cat3 & и cat4) и их непосредственному родителю (т.е. cat2). Но должности не относятся к категории первого уровня (например, cat1).

Теперь вы хотите подсчитывать сообщения, основанные на категории верхнего / первого уровня, если мое понимание верное, можете ли вы рассказать мне, что не так с использованием кода ниже?

 function wp_get_postcount($id) { //return count of post in category child of ID 15 $count = 0; $taxonomy = 'category'; $args = array('child_of' => $id); $tax_terms = get_terms($taxonomy,$args); foreach ($tax_terms as $tax_term) { if ($tax_term->parent == $id) { $count +=$tax_term->count; } } return $count; } 

Для тех, кто get_terms() свои таксономии через get_terms() , вы можете передать аргумент 'pad_counts' => true чтобы добавить число детей в родителей.

Например :

 $my_taxonomy_terms = get_terms( ['my_taxonomy'], ['orderby' => 'count', 'hide_empty' => false, 'order' => 'DESC', 'pad_counts' => true] ); /* Assuming you have at least one term, this will show you the number of objects that use your most popular term. */ echo $my_taxonomy_terms[0]->count; 

Источник: здесь

Funtion, чтобы получать количество сообщений от заданного срока или условий и их / их детей

Количество сообщений в категории, включая категории детей