Отправляет email-рассылки с помощью сервиса Sendsay
←  Предыдущая тема Все темы Следующая тема →
пишет:

Wordpress функция get_queried_object(). Выводим количество записей в категориях/тегах.

количество записей в категориях

Изначально хотел дописать хак в статью про функцию 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

15.07.2019
Пожаловаться Просмотров: 325  
←  Предыдущая тема Все темы Следующая тема →


Комментарии временно отключены