Изначально хотел дописать хак в статью про функцию 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
|
|||
Последние откомментированные темы:
megr***@m*****.ru , 18.12.2011