
Изначально хотел дописать хак в статью про функцию get_the_category но там и так уже достаточно много контента и примеров, поэтому не буду вас лишний раз запутывать. Суть сегодняшней задачи – посчитать и вывести на сайте количество постов в определенном разделе или по метке. То есть, например, заходите в архив категории «Новости», и сверху отображается соответствующе количество заметок в нем. Аналогичную фишку реализовал и для меток, потому как сниппет получился универсальным. Финальный код – в самом конце, в начале немного предыстории.
Если вы работаете с Вордпресс как редактор, то наверняка в виджетах видели соответствующие настройки для отображения числа записей.

Что касается коддинга, то тут, как я понимаю, есть несколько путей. Во-первых, можно использовать функцию get_category, которая помогает считывать инфу о текущей открытой рубрике.
if (is_category()) {
$cur_cat = get_category(get_query_var('cat'));
print_r( $cur_cat);
echo $cur_cat->count;
}
|

Она работает на основе другой функции get_term, что в свою очередь выдает нам инфу о любой таксономии, например, тегах.
$term = get_term( $term_id, $taxonomy ); |
В принципе, сейчас допускается указывать лишь $term_id в этой конструкции, а второй параметр стал не обязательный. На выходе получаете следующий объект:
object(WP_Term) (11) {
["term_id"]=> //int
["name"]=> //string
["slug"]=> //string
["term_group"]=> //int
["term_taxonomy_id"]=> //int
["taxonomy"]=> //string
["description"]=> //string
["parent"]=> //int
["count"]=> // int
["filter"]= //string
["meta"]= array(0) {} //an array of meta fields.
}
|
Здесь, как видите, тоже есть параметр count.
А теперь наконец-то вариант, который использовал я — это еще более универсальная функция get_queried_object. Она возвращает полную информацию о текущем объекте:
- категориях;
- постах;
- авторах;
- метках и т.п.;
Во всех случаях на выходе получите разные объекты (WP_Term, WP_Post), можете потестировать следующий код в шапке сайта и посмотреть какие результаты будут выводиться:
$some_object = get_queried_object(); print_r( $some_object ); |

Таким образом, мы подобрались к самому главному – отображению количества статей в категориях и тегах:
if ((is_category()) || (is_tag())) {
$categories = get_queried_object();
$count = $categories->count;
$taxonomy = $categories->taxonomy;
$args = array(
'child_of' => $categories->term_id,
);
$tax_terms = get_terms($taxonomy, $args);
foreach ($tax_terms as $tax_term) {
$count +=$tax_term->count;
}
echo $count;
}
|
Хак универсальный, вроде бы, все работает корректно. Здесь мы не просто считываем значение count одной таксономии, но также проверяем наличие подрубрик, а затем узнаем количество постов и там (если они есть). В противном случае, результаты бы не учитывали иерархию.
Теоретически, наверное, можно было использовать здесь и get_term – мне ведь по сути нужны только данные рубрик/меток. Если есть что дополнить или исправить – пишите.
Это интересно
0
|
|||

Последние откомментированные темы:
-
Изменение ссылок
(1)
casham
,
01.02.2012
-
Плагин Special Text Boxes
(2)
Ирина
,
27.12.2011
-
Как закрыть ссылки от индексации быстро и красиво. Плагины WP-NoRef и WP No External Links.
(2)
-
Вышел WordPress 3.3 русская версия
(1)
casham
,
16.12.2011
-
Что нового в WordPress 3.3
(1)
casham
,
16.12.2011
20251028075222megr***@m*****.ru , 18.12.2011