Рандомные теги на WordPress

случайные теги WordPressКак вы знаете, WordPress не умеет самостоятельно выводить случайные теги. Если забыли, то рекомендую ознакомиться со статьей про систематику wp_tag_cloud на WordPress codex. Достаточно хоть немного разбираться в php, тогда не трудно будет заметить способы вывода тегов, которые определяются параметром order. Для него существуют следующие значения: ‘ASC’ (установлен по умолчанию; сортировка в алфавитном порядке), ‘DESC’ (сортировка в порядке обратном алфавитному) и ‘RAND’ (в случайном порядке). И, казалось бы, все прекрасно, только используй ‘RAND’. Но по факту WordPress просто перемешает ваши теги. Более того, как движок выводил фиксированные эти 45 меток, так и будет. Например, у вас всего 100 тегов. Всегда будут показываться 45, и всегда одни и те же. В перемешанном порядке — да, но одинаковые!
Оказалось, что плагин, которым я пользовался уже 5 лет, (random_tag_cloud или как-то так) меня обманывает и на самом деле не генерирует кучу случайных тегов, а тупо переставляет их местами за счет ‘order’ => ‘RAND’. То есть облако, как было отмечено выше, не получается уникальным. Это печально.
Прежде, чем мы перейдем к сути, буквально пара строк ликбеза о том, что вообще происходит при создании облака меток. Каждый тег хранится в MySQL базе данных под своим уникальным номером с параметром term_id. В привычном виде на панели админнистратора этот значение вам знакомо в виде tag_ID.
Для решения поставленной задачи хорошо бы вывести несколько случайных цифр, которые бы и являлись tag_ID number. Вот тут я как раз и вспомнил про замечательную математическую функцию rand(), чтобы генерировать рандомные числа. Теперь все, что нужно — это вписать верный диапазон ID (от самого первого тега до последнего) и выставить необходимое количество случайных генераций выводимых тегов, уменьшая или увеличивая повторение функции rand(). Исходя из вышесказанного, я набросал вот такой небольшой код для functions.php используемого шаблона:

add_filter( 'widget_tag_cloud_args', 'my_widget_tag_cloud_args' );
function my_widget_tag_cloud_args( $args ) {
	$args['include'] = array (rand(1, 100), rand(1, 100), rand(1, 100));
	return $args;
}

Немного комментариев по работе кода: сначала объявляем новый аргумент my_widget_tag_cloud_args; далее с помощью параметра include показываем теги с нужными нам номерами, а эти номера генерируются рандомно благодаря функции rand, которая использовалась 3 раза. Значит, в итоге на странице мы получим 3 случайных тега. Выбор числового значения находится в диапазоне от 1 до 100 (предполагается, что первый тег имеет ID=1, последний ID=100). Наконец мы закрываем аргумент.
рандомные теги wordpressОгромным плюсом всего этого является отсутствие надобности устанавливать какие-то дополнительные плагины или виджеты. Вы ведь знаете, что по возможности лучше не нагромождать на WordPress кучу дополнений. С другой стороны, если у вас есть иное решение, пожалуйста, сообщите о нем в комментариях — это было бы очень полезно. Я же прошу вас особо свирепо не бросаться в меня камнями из-за быдловатого кода, ведь наверняка есть какое-то более простое решение. Но, к сожалению, не удалось найти даже хоть что-нибудь для вывода случайных тегов. В рунете просто пустота на эту тему, а на зарубежных сайтах предлагается один-два варианта, но с абсолютно дичайшим полотном кода.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

ceмь + тpи =