В этой статье мы покажем, как перенаправлять пользователей на случайную запись в WordPress. Это достаточно нетривиальный прием, который очень часто может привлечь внимание ваших посетителей или клиентов. Например, если вы публикуете цикл обзоров популярных гаджетов или, скажем, подборку видео уроков о настройке чего-либо, — всегда можно добавить в боковой колонке кнопку на Случайный урок или обзор, это часто работает!

Откройте файл functions.php вашей темы и вставьте туда следующий код:

add_action('init','random_add_rewrite');
function random_add_rewrite() {
       global $wp;
       $wp->add_query_var('random');
       add_rewrite_rule('random/?$', 'index.php?random=1', 'top');
}

add_action('template_redirect','random_template');
function random_template() {
       if (get_query_var('random') == 1) {
               $posts = get_posts('post_type=post&orderby=rand&numberposts=1');
               foreach($posts as $post) {
                       $link = get_permalink($post);
               }
               wp_redirect($link,307);
               exit;
       }
}

Все, готово. Теперь создайте кнопку, которая будет вести на

http://ваш-сайт.com/index.php?random=1

и указанный выше фрагмент кода сделает все остальное.

Объяснение кода:

Этот код сначала добавляет переменную запроса Random. Затем он использует зацепку template_redirect и говорит, что если есть переменная random, то взять запись типа "Post" случайным образом. Затем он делает просто 307 редирект.

Причина, по которой в коде используется 307 редирект, в том, что это временное перенаправление. Браузеры часто кешируют 302 редирект, который общеизвестен для временных перенаправлений.

Несколько багов, через которые мы прошли:

Если вы используете W3 Total Cache и у вас включено кеширование базы данных, вам нужно добавить следующие правила в список исключений:

/random/
/index.php?random=1

Если вы используете плагин Yoast’s WordPress SEO, просто не ставьте отметку возле пункта Redirect Ugly URLs в блоке постоянных ссылок, иначе код не будет работать.

Источник: WPBeginner

Вам понравился материал?

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

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

12 комментариев

сначала новые
по рейтингу сначала новые по хронологии
Андрей

Добрый день.
Создал новый сайт, Google успел проиндексировать 5 статей. На сайте использую этот код открытия случайной статьи.

Проблема в том, что в поисковике при вводе запроса "site:название сайта" выходит список этих 5 статей, а затем сообщение:
"Мы скрыли некоторые результаты, которые очень похожи на уже представленные выше (5)".

Нажав на "Показать скрытые результаты", открывается только одна ссылка:
"сайт.ru/index.php?random=1
Описание веб-страницы недоступно из-за ограничений в файле robots.txt. Подробнее...".

Как решить эту проблему? Подскажите, пожалуйста.
Заранее большое спасибо!

В код нужно дописать один момент, чтобы случайная запись не была та же, что сейчас открыта. А то я нажимаю и три раза подряд выводится одна и та же запись. А так код супер. Автор молодец. Предлагаю ссылку на готовые, оформленные кнопки http://shpargalkablog.ru/2012/04/css-knopki.html#on

Сергей

Всё великолепно работает... только один раз, а нужно чтоб каждый раз выдавалась новая случайная статья. У меня установлен W3 Total Cache и "нужно добавить следующие правила в список исключений..." не работает. Может не туда добавляю? Куда нужно добавить эти правила, в каком разделе плагина? Посоветуйте как победить кеш, пожалуйста. Может надо сделать отдельную страницу (ваш-сайт.com/random/) и задать её в исключения? Тогда куда Ваш код прописывать?
Кстати, при полном отключении плагина всё и у всех (читателей) отлично работает многократно, так что это точно плагин мутит :) .

Код работает. Спасибо. Кому нужен случайный пост из определенной категории читайте инфу по функции get_posts и добавляйте нужные параметры.

Все спасибо, отлично работает! Но это только одна ссылка выбора случайной записи из определенной категории. А как сделать так чтобы бы было куча различных подобных ссылок по рубрикам. Пытался копировать этот код несколько раз подряд, но выдает ошибку

Добрый день.
Интересует вывод рандомного поста из определенной категории. Не подскажите, как это можно сделать?

Возьмите за основу наш код, и нужно будет добавить условие проверки по рубрике!

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

Андрей

Здравствуйте!
Ваш код не работает.

Попробуйте указать в ссылке вместо ваш-сайт.com/random/
ваш-сайт/index.php?random=1

Андрей

Большое вам спасибо! Всё работает! Ещё вопрос: из-за этого рандома у меня не будет в выдаче поисковиков дублей?

Нет, поисковикам эта функция никак не страшна.