24.12.2015
Облако меток для постов из определенной категории
Стандартный функционал WordPress позволяет вывести облако меток всех записей вашего сайта, для этого используется функция wp_tag_cloud(). Что делать, если необходимо вывести теги только из определенной категории, например, если у вас блог является категорией и необходимы теги только из блога. Для этого мы написали функцию, которая формирует облако тегов из категории.
Необходимо скопировать следующую функцию в файл functions.php вашей темы.
Для вывода облака тегов из определенной рубрики, необходимо в нужном месте вашего шаблона вставить код.
Параметры данной функции:
- smallest — минимальный размер шрифта для менее популярных тегов
- largest — максимальный размер шрифта для наиболее популярных тегов
- unit — размерность шрифта, принимает значения px, em, pt, %
- 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 ); }?>
Нам будет приятно
Поделитесь
Комментарии