24.12.2015

Облако меток для постов из определенной категории

Облако меток для постов из определенной категории

Стандартный функционал WordPress позволяет вывести облако меток всех записей вашего сайта, для этого используется функция wp_tag_cloud(). Что делать, если необходимо вывести теги только из определенной категории, например, если у вас блог является категорией и необходимы теги только из блога. Для этого мы написали функцию, которая формирует облако тегов из категории.

Необходимо скопировать следующую функцию в файл functions.php вашей темы.

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

Параметры данной функции:

  1. smallest — минимальный размер шрифта для менее популярных тегов
  2. largest — максимальный размер шрифта для наиболее популярных тегов
  3. unit — размерность шрифта, принимает значения px, em, pt, %
  4. category — категория, из которой нужно выводить теги
<?function keengo_tag_cloud( $args = '' ) {
	// Стандартные параметры функции
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'category' => 1
	);
	$args = wp_parse_args( $args, $defaults );
	global $wpdb;
	
	// Получаем ID таксономии выбранной категории и по нему получаем все посты
	$keengo_category = $args['category'];
	$keengo_term_taxonomy_id = $wpdb->get_var("SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE term_id = $keengo_category AND taxonomy = 'category' ");
	$keengo_posts = $wpdb->get_results("SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = $keengo_term_taxonomy_id ", ARRAY_A);
	// Преобразовываем полученные ID постов в строку
	$keengo_post_IDs_array = array();
	foreach ( $keengo_posts as $keengo_post ) {
		$keengo_post_IDs_array[] = $keengo_post['object_id'];
	}
	$keengo_post_IDs = implode(',', $keengo_post_IDs_array);
	
	// Получаем список тегов для выбранных из категории постов
	$keengo_metas_array = $wpdb->get_results("SELECT term_taxonomy_id, count(object_id) FROM $wpdb->term_relationships WHERE object_id IN ($keengo_post_IDs) GROUP BY term_taxonomy_id ", ARRAY_A);
	$keengo_metas = array();
	$count_max = 0;
	$count_min = 1000000;
	// Для каждлго тега находим название, ссылку, количество
	foreach ( $keengo_metas_array as $meta_key => $keengo_meta ) {
		$keengo_meta_term_taxonomy_id = $keengo_meta['term_taxonomy_id'];
		$keengo_taxonomy = $wpdb->get_var("SELECT taxonomy FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = $keengo_meta_term_taxonomy_id ");
		if ( $keengo_taxonomy == 'post_tag' ) {
			$keengo_term_id = $wpdb->get_var("SELECT term_id FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = $keengo_meta_term_taxonomy_id ");
			$keengo_term_name = $wpdb->get_var("SELECT name FROM $wpdb->terms WHERE term_id = $keengo_term_id ");
			$keengo_metas[$keengo_term_name]['link'] = get_tag_link($keengo_term_id);
			$keengo_metas[$keengo_term_name]['count'] = $keengo_meta['count(object_id)'];
			
			if ( $keengo_meta['count(object_id)'] > $count_max ) {
				$count_max = $keengo_meta['count(object_id)'];
			}
			if ( $keengo_meta['count(object_id)'] < $count_min ) {
				$count_min = $keengo_meta['count(object_id)'];
			}
		}
	}
	// Сортируем полученный массив
	ksort($keengo_metas);
	
	// Формируем вывод тегов с указанием размера шрифта для наглядности
	$count_delta = $count_max - $count_min;
	$size_min = $args['smallest'];
	$size_max = $args['largest'];
	$size_delta = $size_max - $size_min;
	foreach ( $keengo_metas as $name => $meta ) {
		$size = $size_min + $size_delta * ($meta['count'] - $count_min) / $count_delta;
		echo('<a href="'.$meta['link'].'" style="font-size: '.$size.$args['unit'].'">'.$name.'</a> ');
	}
}?>

<?if ( function_exists('keengo_tag_cloud') ){
	$args = array(
		 'smallest'	=> 12
		,'largest'	=> 18
		,'unit'		=> 'px'
		,'category'	=> 5
	);
	keengo_tag_cloud( $args );
}?>

Нам будет приятно

Поделитесь

Комментарии

Загрузка комментариев...