wp_generate_tag_cloud() WP 2.3.0

Обробляє передані дані термінів (міток) та повертає HTML код хмари тегів.

Основа для:
wp_tag_cloud()

Повертає

Строку|Строку[]. Хмара тегів у вигляді рядка або масиву, залежно від аргументу format.

Шаблон використання

$ args = array (
	'smallest' => 8,
	'largest' => 22,
	'unit' => 'pt',
	'number' => 0,
	'format' => 'flat',
	'separator' => 'n',
	'orderby' => 'name',
	'order' => 'ASC',
	'topic_count_text_callback' => 'default_topic_count_text',
	'topic_count_scale_callback' => 'default_topic_count_scale',
	'filter' => 1,
);

wp_generate_tag_cloud ($ tags, $ args);

Використання

<?php wp_generate_tag_cloud( $tags, $args ); ?>
$tags
(масив) (обов’язковий)
Масив об’єктів
WP_Term , які потрібно показати в “хмарі”. На основі цих даних буде створено потрібний розмір тексту для кожної мітки та проведено сортування термінів (міток).
$args
(рядок/масив)
Аргументи, що характеризують хмару.


За замовчуванням: встановлені

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

smallest
(число)
Розмір тексту для позначок з
меншою кількістю записів (одиниці вимірювання вказуються в параметрі unit).


Типово: 8
largest
(число)
Розмір тексту для позначок з
великою кількістю записів (одиниці вимірювання вказуються в параметрі unit).


За замовчуванням: 22
unit
(рядок)
Одиниці виміру параметрів smallest і largest. Можливо будь-яким CSS типом розміру: pt, px, em, %.


За замовчуванням: ‘pt’
number
(число)
Максимальна кількість позначок, яка буде показана у списку. Якщо встановити на 0, то будуть показані всі позначки без обмеження.
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– Хаотичний порядок (перемішати).

За замовчуванням: ‘ASC’

topic_count_text_callback
(рядок)
Функція, яка отримує кількість записів та повертає текст для мітки.


За замовчуванням: ‘default_topic_count_text’
topic_count_scale_callback
(рядок)
Функція масштабування.


За замовчуванням: ‘default_topic_count_scale’
show_count
(логічний)
Чи показувати кількість записів у мітці. За замовчуванням 0. Можливо: 0, 1 або true/false. З WP 4.8.
filter
(число)
Застосовувати фільтр чи ні. Якщо true, результат буде пропускатися через фільтр:
wp_generate_tag_cloud .


За замовчуванням: 1

Приклади

0

#1 Приклад того, що виводить функція

Отримаємо категорії та зробимо з них хмару “міток”:

$terms = get_terms( [ 'taxonomy' => 'category' ] );

$cloud = wp_generate_tag_cloud( $terms, [
	'echo' => false,
]);

echo $cloud;

Виведе наступний HTML:

<a href="" class="tag-cloud-link tag-link-0 tag-link-position-1" style="font-size: 8pt;" aria-label="Wordpress (0 елементів)">Wordpress</a>
<a href="" class="tag-cloud-link tag-link-1 tag-link-position-2" style="font-size: 18.070175438596pt;" aria-label="Авторські Функції (16 елементів)">Авторські Функції</a>
<a href="" class="tag-cloud-link tag-link-2 tag-link-position-3" style="font-size: 12.912280701754pt;" aria-label="Админка (3 елементи)">Адмінка</a>
<a href="" class="tag-cloud-link tag-link-3 tag-link-position-4" style="font-size: 20.444444444444pt;" aria-label="Кодекс (32 елементи)">Кодекс</a>
<a href="" class="tag-cloud-link tag-link-4 tag-link-position-5" style="font-size: 16.514619883041pt;" aria-label="Не WordPress (10 елементів)">Не WordPress</a>
<a href="" class="tag-cloud-link tag-link-5 tag-link-position-6" style="font-size: 12.912280701754pt;" aria-label="Непотрібне (3 елементи)">Непотрібне</a>
<a href="" class="tag-cloud-link tag-link-6 tag-link-position-7" style="font-size: 14.959064327485pt;" aria-label="Оптимізація (6 елементів)">Оптимізація</a>
<a href="" class="tag-cloud-link tag-link-7 tag-link-position-8" style="font-size: 22pt;" aria-label="Корисності (50 елементів)">Корисності</a>
<a href="" class="tag-cloud-link tag-link-8 tag-link-position-9" style="font-size: 18.315789473684pt;" aria-label="Корисні дрібниці (17 елементів)">Корисні дрібниці</a>
<a href="" class="tag-cloud-link tag-link-9 tag-link-position-10" style="font-size: 18.643274853801pt;" aria-label="Різне (19 елементів)">Різне</a>
<a href="" class="tag-cloud-link tag-link-10 tag-link-position-11" style="font-size: 18.643274853801pt;" aria-label="Сервіси та хостинги (19 елементів)">Сервіси та хостинги</a>
<a href="" class="tag-cloud-link tag-link-11 tag-link-position-12" style="font-size: 14.385964912281pt;" aria-label="Теми WordPress (5 елементів)">Теми WordPress</a>

список змін

З версії 2.3.0Введено.
З версії 4.8.0Added the show_count argument.

Код wp_generate_tag_cloud() WP 6.0.2

function wp_generate_tag_cloud( $tags, $args = '' ) {
	$defaults = array(
		'smallest' => 8,
		'largest' => 22,
		'unit' => 'pt',
		'number' => 0,
		'format' => 'flat',
		'separator' => "n",
		'orderby' => 'name',
		'order' => 'ASC',
		'topic_count_text' => null,
		'topic_count_text_callback' => null,
		'topic_count_scale_callback' => 'default_topic_count_scale',
		'filter' => 1,
		'show_count' => 0,
	);

	$ args = wp_parse_args ($ args, $ defaults);

	$return = ( 'array' === $args['format'] ) ? array() : '';

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

	// Juggle topic counts.
	if ( isset( $args['topic_count_text'] ) ) {
		// First look for nooped plural support via topic_count_text.
		$translate_nooped_plural = $args['topic_count_text'];
	} elseif ( ! empty( $args['topic_count_text_callback'] ) ) {
		// Look for the alternative callback style. Ignore the previous default.
		if ( 'default_topic_count_text' === $args['topic_count_text_callback'] ) {
			/* translators: %s: Number of items (tags). */
			$translate_nooped_plural = _n_noop( '%s item', '%s items' );
		} else {
			$translate_nooped_plural = false;
		}
	} elseif ( isset( $args['single_text'] ) && isset( $args['multiple_text'] ) ) {
		// If no callback exists, look for the old-style single_text and multiple_text arguments.
		// phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralSingle,WordPress.WP.I18n.NonSingularStringLiteralPlural
		$translate_nooped_plural = _n_noop( $args['single_text'], $args['multiple_text'] );
	} else {
		// Це не означає, що якщо не callback, plural, або argument is passed in.
		/* translators: %s: Number of items (tags). */
		$translate_nooped_plural = _n_noop( '%s item', '%s items' );
	}

	/**
	 * Filters how the items in tag cloud are sorted.
	 *
	 * @ Since 2.8.0
	 *
	 * @param WP_Term[] $tags Ordered array of terms.
	 * @param array $args На array of tag cloud arguments.
	 */
	$tags_sorted = apply_filters( 'tag_cloud_sort', $tags, $args);
	if ( empty( $tags_sorted ) ) {
		return $return;
	}

	if ( $tags_sorted !== $tags ) {
		$tags = $tags_sorted;
		unset ($ tags_sorted);
	} else {
		if ( 'RAND' === $args['order'] ) {
			shuffle ($ tags);
		} else {
			// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
			if ( 'name' === $args['orderby'] ) {
				uasort( $tags, '_wp_object_name_sort_cb');
			} else {
				uasort( $tags, '_wp_object_count_sort_cb');
			}

			if ( 'DESC' === $args['order'] ) {
				$ tags = array_reverse ($ tags, true);
			}
		}
	}

	if ( $args['number'] > 0 ) {
		$tags = array_slice($tags, 0, $args['number']);
	}

	$counts = array();
	$ real_counts = array(); // For the alt tag.
	foreach ((array) $tags as $key => $tag ) {
		$real_counts[$key] = $tag->count;
		$counts[ $key ] = call_user_func( $args['topic_count_scale_callback'], $tag->count );
	}

	$ min_count = min ($ counts);
	$ spread = max ($ counts) - $ min_count;
	if ( $spread <= 0 ) {
		$spread = 1;
	}
	$font_spread = $args['largest'] - $args['smallest'];
	if ( $font_spread < 0 ) {
		$ font_spread = 1;
	}
	$font_step = $font_spread / $spread;

	$aria_label = false;
	/*
	 * Визначте, скільки потрібно виконати 'aria-label' atribut with the tag name and count.
	 * When tags have different font size, вони visually convey an important information
	 * that should be available to assistive technologies too. On the other hand, sometimes
	 * themes set up the Tag Cloud для відтворення всіх tags with the same font size (setting
	 * the 'smallest' and 'largest' arguments to the same value).
	 * У відповідь на все, щоб скористатися самим вмістом для всіх користувачів, 'aria-label' gets printed out:
	 * - коли tags have a different size
	 * - when the tag count is displayed (для example when users check the checkbox in the
	 * Tag Cloud widget), незважаючи на tags font size
	 */
	if ( $args['show_count'] || 0 !== $font_spread ) {
		$aria_label = true;
	}

	// Assemble the data that will be used to generate the tag cloud markup.
	$tags_data = array();
	foreach ( $tags as $key => $tag ) {
		$tag_id = isset($tag->id)? $tag->id: $key;

		$count = $counts[$key];
		$ real_count = $ real_counts [$ key];

		if ( $translate_nooped_plural ) {
			$formatted_count = sprintf(translate_nooped_plural( $translate_nooped_plural, $real_count ), number_format_i18n( $real_count ));
		} else {
			$formatted_count = call_user_func( $args['topic_count_text_callback'], $real_count, $tag, $args);
		}

		$tags_data[] = array(
			'id' => $tag_id,
			'url' => ( '#' !== $tag->link ) ? $tag->link : '#',
			'role' => ( '#' !== $tag->link ) ? '' : ' role="button"',
			'name' => $tag->name,
			'formatted_count' => $formatted_count,
			'slug' => $tag->slug,
			'real_count' => $real_count,
			'class' => 'tag-cloud-link tag-link-' . $tag_id,
			'font_size' => $args['smallest'] + ( $count - $min_count ) * $font_step,
			'aria_label' => $aria_label? sprintf( ' aria-label="%1$s (%2$s)"', esc_attr( $tag->name ), esc_attr( $formatted_count ) ) : '',
			'show_count' => $args['show_count'] ? '<span class="tag-link-count"> (' . $real_count . ')</span>' : '',
		);
	}

	/**
	 * Filters the data використовується для створення tag cloud.
	 *
	 * @ Since 4.3.0
	 *
	 * @param array[] $tags_data На array of term data arrays for terms use to generate the tag cloud.
	 */
	$tags_data = apply_filters( 'wp_generate_tag_cloud_data', $tags_data );

	$a = array();

	// Generate the output links array.
	foreach ( $tags_data as $key => $tag_data ) {
		$class = $tag_data['class'] . 'tag-link-position-'. ($ key + 1);
		$a[] ​​= sprintf(
			'<a href="%1$s"%2$s class="%3$s" style="font-size: %4$s;"%5$s>%6$s%7$s< /a>',
			esc_url( $tag_data['url'] ),
			$tag_data['role'],
			esc_attr($class),
			esc_attr( str_replace( ',', '.', $tag_data['font_size'] ) . $args['unit'] ),
			$tag_data['aria_label'],
			esc_html( $tag_data['name'] ),
			$tag_data['show_count']
		);
	}

	switch ( $args['format'] ) {
		case 'array':
			$return =& $a;
			break;
		case 'list':
			/*
			 * Force role="list", як деякі браузери (sic: Safari 10) не expose to assistive
			 * technologys default role when the list is styled with `list-style: none`.
			 * Note: this is redundant but doesn't harm.
			 */
			$return = "<ul class='wp-tag-cloud' role='list'>nt<li>";
			$return .= implode( "</li>nt<li>", $a );
			$return .= "</li>n</ul>n";
			break;
		default:
			$return = implode( $args['separator'], $a);
			break;
	}

	if ( $args['filter'] ) {
		/**
		 * Filters generated output of a tag cloud.
		 *
		 * The filter is only evaluated if a true value is passed
		 * to the $filter argument in wp_generate_tag_cloud().
		 *
		 * @ Since 2.3.0
		 *
		 * @see wp_generate_tag_cloud()
		 *
		 * @param string[]|string $return String містить generated HTML tag cloud output
		 * або array of tag links if the 'format' argument
		 * equals 'array'.
		 * @param WP_Term[] $tags На array of terms використовується в tag cloud.
		 * @param array $args На array of wp_generate_tag_cloud() arguments.
		 */
		return apply_filters( 'wp_generate_tag_cloud', $return, $tags, $args);
	} else {
		return $return;
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *