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 );
}?>
Нам будет приятно
Поделитесь
Комментарии