WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_tag_cloud() WP 2.3

Выводит или получает облако меток (список меток в виде облака). Можно указать произвольную таксономию.

Чтобы вывести элементы произвольной таксономии в виде облака, укажите название таксономии в параметре taxonomy.

"Облако меток" называется так, потому что размер текста каждой метки зависит от того, сколько записей связано с меткой. Чем больше записей, тем больше будет текст метки (в итоге получается нечто похожее на облако).

С версии 2.8 был добавлен параметр taxonomy, позволяющий создавать облако не только для стандартных меток, но и для категорий и произвольных таксономий.

Работает на основе: wp_generate_tag_cloud()
Хуки из функции
Возвращает

null. Выводит на экран html код списка.

  • Возвращает HTML, если параметр echo = false.
  • Вернет массив облака меток, если параметр format = array.
  • false, если не удалось получить метки.

Шаблон использования

wp_tag_cloud( array(
	'smallest'  => 8,
	'largest'   => 22,
	'unit'      => 'pt',
	'number'    => 45,
	'format'    => 'flat',
	'separator' => "\n",
	'orderby'   => 'name',
	'order'     => 'ASC',
	'exclude'   => null,
	'include'   => null,
	'link'      => 'view',
	'taxonomy'  => 'post_tag',
	'echo'      => true,
	'topic_count_text_callback' => 'default_topic_count_text',
) );

Использование

<?php wp_tag_cloud( $args ); ?>
$args(строка/массив)
Аргументы, на основе которых будет построен список.
По умолчанию: базовые значения

Аргументы параметра $args

В $args можно также указать все параметры функции get_terms(). Получение элементов таксономии работает на базе этой функции.

smallest(число)
Размер текста для меток с меньшим количеством записей (единицы измерения указываются в параметре unit).
По умолчанию: 8
largest(число)
Размер текста для меток с большим количеством записей (единицы измерения указываются в параметре unit).
По умолчанию:
unit(строка)
Единицы измерения параметров smallest и largest. Может быть любым CSS типом размера: pt, px, em, %.
По умолчанию: 'pt'
number(число)
Максимально количество меток, которое будет показано в списке. Если установить на 0, то будут показаны все метки без ограничения.
По умолчанию: 45
format(строка)

В каком формате выводить список. Может быть:

  • flat - метки будут разделены разделителем, указанным в параметре separator;
  • list - UL список с CSS классом 'wp-tag-cloud';
  • array - вернет облако меток в массиве для дальнейшей обработки в PHP.
    По умолчанию: 'flat'
separator(строка)
Текст между метками.
По умолчанию: "\n"
orderby(строка)
Сортировать метки по имени (name) или количеству записей (count). Не влияет на запрос к базе данных.
По умолчанию: 'name'
order(строка)

Порядок сортировки. Может быть:

  • ASC - по порядку (1,2,3);
  • DESC - в обратном порядке (3,2,1);
  • RAND - хаотичный порядок (перемешать).

order и orderby не влияют на запрос к базе данных. Метки сначала получаются из базы данных, затем сортируются. Эти параметры для получения из базы данных равны: orderby=count и order=DESC и их нельзя изменить.
По умолчанию: 'ASC'

exclude(строка)
Исключить указанные метки. Указывать нужно ID через запятую.
По умолчанию: null
include(строка)
Показать только указанные метки. Указывать нужно ID через запятую.
По умолчанию: null
topic_count_text_callback(строка/массив)
Функция, которая получает количество записей и возвращает текст для метки. Можно установить свою функцию, если нужно отображать какой-либо другой текст с количеством записей для каждой метки.
По умолчанию: default_topic_count_text
link(строка)

Куда будет вести ссылка метки.

  • view - по нажатию на метку, попадем на страницу метки;
  • edit - по нажатию на метку, попадем на страницу редактирования метки.
    По умолчанию: view
taxonomy(строка/массив)

Название таксономии или массив нескольких названий, из которых будет построено облако. Может быть:

  • post_tag;
  • category;
  • link_category;
  • Своя таксономия;
  • Массив названий таксономий - параметр введен в версии 3.1.
    По умолчанию: post_tag
show_count(логический)
Показывать ли число записей в метке. По умолчанию 0. Может быть: 0, 1 или true/false. С WP 4.8.
echo(логический)
1 - Выводить на экран, 0 - возвращать результат для дальнейшей обработки.
По умолчанию: 1 (true)

Примеры

#1 Базовое использование

Выведем облако меток с заголовком "Популярные метки":

<?php
if ( function_exists('wp_tag_cloud') ){
	echo '<h2>Популярные метки</h2>';
	wp_tag_cloud('smallest=8&largest=22');
}
?>

#1.2. Еще одни пример демонстрирующий передачу разных параметров

Изменим размеры меток (smallest=15&largest=40), ограничим количество выводимых меток (number=50) и отсортируем их по количеству записей, а не по имени (orderby=count):

<?php wp_tag_cloud('smallest=15&largest=40&number=50&orderby=count'); ?>

#2 Получим список, не будем выводить его на экран

Запишем список в параметр $tag, чтобы потом использовать его в php для своих целей:

<?php $tag = wp_tag_cloud('format=array' );?>

#3 Облако категорий

Выведем облако категорий, вместо облака меток. Для этого изменим название таксономии:

<?php wp_tag_cloud( array( 'taxonomy' => 'category' ) ); ?>

#3.1. Облако меток и категорий одновременно

Можно слепить категории и метки в одно облако:

<?php
wp_tag_cloud( array(
	'taxonomy' => array('post_tag','category'),
) );
?>

#4 Изменение текста атрибута title у тега <a>

При наведении на ссылку, показывается количество записей метки. Чтобы изменить этот текст, можно использовать параметр topic_count_text_callback, в котором укажем свою функцию для создания текста:

<?php
wp_tag_cloud( array( 'topic_count_text_callback' => 'my_tag_text_callback' ) ); 

function my_tag_text_callback( $count ) {
	return sprintf( _n('%s картинка', '%s картинок', $count), number_format_i18n( $count ) );
}
?>

#5 Архив меток

Как один из вариантов использования меток, предлагаю создать архивные страницы меток. При клике на определенную метку, мы попадаем на страницу с постами связанными с этой меткой. Как выглядет такая страница, определяется файлом шаблона tag.php, если такого файла нет (обычно его ент), то формирование вывода отдается файлу archives.php.

Давайте сделаем страницу метки, на которой в самом начале будет показано облако меток, а после него записи относящиеся к выбранной метке. Для этого создадим (если нет) или изменим (если существует) файл tag.php. Создавать файл нужно в каталоге темы.

Содержимое файла tags.php:

<?php
/*
Template Name: Tag Archive
*/
?>

<?php get_header(); ?>

<div>

<h2>Tag Archive</h2>

<?php wp_tag_cloud(''); ?>
	<div class="navigation">
<div class="alignleft"><?php next_posts_link('« Older Entries') ?></div>
<div class="alignright"><?php previous_posts_link('Newer Entries »') ?></div>
	</div>
<?php if (have_posts()) : ?>
		<?php while (have_posts()) : the_post(); ?>
		<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></h2>
	<div class="entry">
	<?php the_content('Read the rest of this entry »'); ?>
	</div>

	<?php endwhile; ?>
	<?php endif; ?>
</div>

<?php get_footer(); ?>

В данном примере не учитываются CSS стили, поэтому возможна несовместимость с шаблоном.

#6 Изменение параметров по умолчанию для виджета облака меток через фильтр

Допустим, нам нужно уменьшить максимальный шрифты для виджета с облаком меток. Нужно поставить значение 16, а не 22 для параметра 'largest'. Для этого используем хук widget_tag_cloud_args

add_filter('widget_tag_cloud_args', function( $args ){
	$args['largest'] = 16;

	return $args;
});

На этот пример меня подтолкнул этот комменатрий

Заметки

  • В версии 3.1 добавлен возможность передавать массивы в параметр taxonomy;
  • В версии 2.9 добавлен параметр separator;
  • В версии 2.8 добавлены параметры taxonomy и echo;
  • В версии 2.7 добавлен параметр link;

Список изменений

С версии 2.3.0 Введена.
С версии 4.8.0 Added the show_count argument.

Код wp tag cloud: wp-includes/category-template.php WP 5.2.3

<?php
function wp_tag_cloud( $args = '' ) {
	$defaults = array(
		'smallest'   => 8,
		'largest'    => 22,
		'unit'       => 'pt',
		'number'     => 45,
		'format'     => 'flat',
		'separator'  => "\n",
		'orderby'    => 'name',
		'order'      => 'ASC',
		'exclude'    => '',
		'include'    => '',
		'link'       => 'view',
		'taxonomy'   => 'post_tag',
		'post_type'  => '',
		'echo'       => true,
		'show_count' => 0,
	);
	$args     = wp_parse_args( $args, $defaults );

	$tags = get_terms(
		$args['taxonomy'],
		array_merge(
			$args,
			array(
				'orderby' => 'count',
				'order'   => 'DESC',
			)
		)
	); // Always query top tags

	if ( empty( $tags ) || is_wp_error( $tags ) ) {
		return;
	}

	foreach ( $tags as $key => $tag ) {
		if ( 'edit' == $args['link'] ) {
			$link = get_edit_term_link( $tag->term_id, $tag->taxonomy, $args['post_type'] );
		} else {
			$link = get_term_link( intval( $tag->term_id ), $tag->taxonomy );
		}
		if ( is_wp_error( $link ) ) {
			return;
		}

		$tags[ $key ]->link = $link;
		$tags[ $key ]->id   = $tag->term_id;
	}

	$return = wp_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args

	/**
	 * Filters the tag cloud output.
	 *
	 * @since 2.3.0
	 *
	 * @param string $return HTML output of the tag cloud.
	 * @param array  $args   An array of tag cloud arguments.
	 */
	$return = apply_filters( 'wp_tag_cloud', $return, $args );

	if ( 'array' == $args['format'] || empty( $args['echo'] ) ) {
		return $return;
	}

	echo $return;
}

Cвязанные функции

Из метки: Список (wp_list списки)

Еще из раздела: Метки

Еще из тегов шаблона: Таксономии: рубрики, метки, ...

46 комментов
Полезные 8 Вопросы 2 Все
  • Virturum onlinevaz.ru

    А можно ли сделать разный цвет, в зависимости от размера тега?

    Ответить8.1 лет назад #
    • Kama7601

      Стандартными методами ВП - нет.

      А вообще можно. Но я не знаю как. Надо думать или найти такой плагин.

      Ответить8.1 лет назад #
  • @ Рубцов rubtsoff.ru

    А ещё можно не мудрствовать лукаво и не редактировать файлы вордпресса, а вывести теги кодом в футере, к примеру. Это будет менее болезненно при обновлении - шаблоны меняют всё-таки реже, чем сейчас ВП обновляется. А статья полезная, я иногда заглядываю на этот сайт, чтобы повспоминать то, что давно не делал.

    Ответить6.1 лет назад #
  • @ Сергей

    Подскажите, а как ко всем ссылкам на категории, добавить какой-то параметр?
    Например, ссылка на категорию Cloth "example.com/category/cloth", а в конец нужно добавить "/?color=red".

    Ответить5.7 лет назад #
    • Kama7601

      Первый вариант
      Получить все ссылки в массив и потом обработать его: вывести все ссылки и к которым нужно добавить параметры:

      $tag = wp_tag_cloud('format=array' );

      Второй вариант
      Использовать регулярные выражения:

      $tag = wp_tag_cloud('echo=0' );
      $tag = preg_replace('~category/cloth~', 'category/cloth?color=red', $tag);
      echo $tag;
      Ответить5.7 лет назад #
      • @ Сергей

        1-й вариант: Можно пример кода? Я в ПХП не особо.

        2-й вариант: у меня более 40 категорий, индивидуально делать для каждой - не катит.

        Я делаю
        $tag = wp_tag_cloud( array( 'taxonomy' => 'category' ) );
        $tag = wp_tag_cloud('echo=0' );
        $tag = str_replace('" class="tag', '/?color=red" class="tag', $tag);
        Но почему-то ничего не происходит.

        Ответить5.7 лет назад #
  • @ Светлана

    А как вывести в сайдбаре список популярных тегов и рядом с каждым тегом в скобках число использования этого тега в блоге? Спасибо

    Ответить5.7 лет назад #
    • Kama7601

      Получите теги которые вам необходимы этой функцией: get_tags()
      Затем, выведите их в виде облака тегов этой функцией: wp_generate_tag_cloud()

      Число вроде этими функциями не получиться отдельно вывести. Его можно регуляркой выбирать из подписи тега и выводить рядом.

      Ответить5.7 лет назад #
  • Сергей3 site.sumy.ua

    Столкнулся с проблемой, когда с облака необходимо скрыть некоторые метки. Аргумент exclude обрабатывал лишь одно значение с перечисленных. Для того, чтобы скрыть несколько меток делайте перечисление через запятую в квадратных скобках. Например:

    wp_tag_cloud(array('exclude' => [3,4,7,8,9,11,123,128,153]));

    Просто оставляю это здесь, так как многие могут столкнуться с подобной проблемой

    2
    Ответить4.9 года назад #
    • Kama7601

      С PHP 5.4 появилась короткая запись массива: [1,2] вместо array(1,2).

      А вообще-то там нужно указывать так:

      wp_tag_cloud( array( 'exclude' => '3,4,76,84' ) );
      
      // или так
      
      wp_tag_cloud( array( 'exclude' => array(3,4,76,84) ) );

      П.С. Спасибо за комментарий!

      1
      Ответить4.9 года назад #
      • Сергей3 site.sumy.ua

        Вам огромное спасибо за исправление моих ошибок. После такого кода у меня лег сервер. Было превышено колличество запущенных скриптов РНР

        1
        Ответить4.9 года назад #
  • Дмитрий

    Как сделать метки без записей отображаемые? То есть выводить их несмотря есть ли посты у меток или нет

    1
    Ответить4.8 года назад #
    • Kama7601

      wp_tag_cloud() работает на основе get_terms(), а в get_terms() можно указать параметр

      'hide_empty'    => false,

      тогда будут получены пустые метки (без записей). Т.е. вам нужно указать параметр hide_empty:

      $args = array(
      	'hide_empty' => false,
      ); 
      
      wp_tag_cloud( $args );
      Ответить4.8 года назад #
  • А что нужно сделать, чтобы метки в облаке тегов сортировались в соответствиии с русским алфавитом?

    Ответить4.8 года назад #
    • Kama7601

      Ничего, они сами должны так сортироваться. А они у вас как сортируются? неправильная сортировка может быть из-за неправильной кодировки... вроде...

      Ответить4.8 года назад #
      • Да с кодировкой вроде нигде не возникало проблем, везде UTF-8. А сортируются они у меня неведомым мне образом. Меток у меня пока немного и выстроились они так: мимоходом идеология публицистика аудио видео настроение христианство. При этом ярлыки у них не латиницей русские слова, а английские аналоги. Но, как бы там ни было, даже если сортировка идёт по ярлыкам audio должно быть в начале, а video - в конце. Осталось проверить ID меток (не по ним ли сортируется), но я не знаю где их искать.

        Ответить4.8 года назад #
        • Kama7601

          Да возможно по ID сортируется. ID можно увидеть в админ-панели - редактирование меток (ссылка на редактирование отдельной метки, в ссылке видно ID метки).

          У вас при вызове функции wp_tag_cloud() параметр orderby какой? Возможно сортируется по количеству записей в метках...

          Ответить4.8 года назад #
  • adward6 cimetrica.ru

    Это как то можно завернуть в шорткод?

    Ответить4.6 года назад #
  • Евгений

    Здравствуйте, я уже давно пользуюсь плагином WP-Cumulus, но только сегодня заметил что в облако тегов перестали добавляться новые метки. Я подсчитал их количество - вроде 45 штук.
    А всего я добавлял в него более 70.

    Что это значит? У него установлены ограничения на количество добавлений меток? Если таких
    ограничений нет, то почему у меня из 70 меток в облаке только первые 45? Можно ли решить эту проблему?

    Я зашел в настройки "расширенные опции"

    Расширенные опции
    Оставьте их пустыми, если вы не уверены в том, как их настраивать.

    параметры функции wp_tag_cloud (справа идет окно для вставки нужного кода, что нужно вставить в это окно не могу разобраться - перепробовал почти все, а результата нет)
    Под этим пустым окном написано: Строка с параметрами для функции wp_tag_cloud (смотрите в codex описание функции) - Я перешел по ссылке и посмотрел параметры, там написано так:
    количество
    (integer) (опционально) количество фактических теги для отображения в облаке. (Используйте '0' для отображения всех тегов.)

    По умолчанию: 45

    В общем я перепробовал вставлять в это окно такие варианты, естественно сохраняясь:
    1 вариант - 0
    2 вариант - 111
    3 вариант - "0"
    4 вариант - "111"
    5 вариант -
    number=111
    6 вариант -
    number=0
    7 вариант - wp_tag_cloud ( array|string|null $args = 111)
    8 вариант - wp_tag_cloud ( array|string|null $args = 0 )
    9 вариант - wp_tag_cloud(111)
    10 вариант - wp_tag_cloud(0)
    11 вариант - smallest=5&largest=50&number=0

    Ничего из этого выше перечисленного не меняет ограниченность заполнения метками облако тегов. Подскажите что я делаю не так?

    Ответить4.5 года назад #
    • Kama7601

      Какой плагин вы юзаете, я просто про него писал?

      Я не помню точно, но вроде там нужно указывать строку с параметрами, как в вашем 11 примере, вам нужно обратить внимание именно на number:
      number=100

      Ответить4.5 года назад #
      • Евгений

        К сожалению число меток 45 - никак не меняется, при любых манипуляциях с параметрами функции wp_tag_cloud - и тот 11 вариант (number=100) или (number=0) ничего не дает.

        Ответить4.5 года назад #
      • Евгений

        Проблему решил, все оказалось просто и банально. Я пытался настроить плагин через центральные настройки управления плагинами, а нужно было зайти непосредственно в виджеты и уже там раскрыв виджет WP-Cumulus - настраивать laugh

        Ответить4.5 года назад #
  • @ Анна www.adminbanner.com

    Спасибо вам за такое хорошее изложение материала! Очень толковый сайт !

    Ответить4.3 года назад #
Здравствуйте, !     Войти . Зарегистрироваться