Перенаправление на случайную запись в WordPress
В этой заметке я покажу, как перенаправлять пользователей на случайную запись в WordPress.
Для некоторых типов сайтов, например развлекательных, где каждая запись может быть интересной и не устаревает особо со временем, может очень пригодится страница, которая показывает случайный пост.
Такая навигация будет работать так: вставляете в шаблон ссылку, кликнув на которую пользователя перекинет на случайную запись.
Реализация
- Вставьте следующий код в файл шаблона
functions.php
:
add_action( 'init', 'random_rewrite_rule' ); add_action( 'template_redirect', 'template_redirect_to_random' ); /* * Перенаправление на случайную запись (post) */ function random_rewrite_rule() { $GLOBALS['wp']->add_query_var('random'); add_rewrite_rule('random/?$', 'index.php?random=random', 'top'); } function template_redirect_to_random() { if( get_query_var('random') != 'random' ) return; $random_post = get_posts('orderby=rand&numberposts=1'); $random_post = array_shift( $random_post ); $link = get_permalink( $random_post ); wp_redirect( $link, 307 ); exit; }
-
Зайдите в админ-панель:
Настройки > постоянные ссылки
и просто нажмите кнопку "Сохранить изменения". Нужно это для того, чтобы правила перезаписи УРЛ пересохранились и добавилось наше новое правило. - Вставьте ссылку
http://example.com/random
куда-нибудь в шаблон. Или используйте такой код:
<a href="<?php echo home_url() . '/random'; ?>">Случайная запись</a>
Все! Теперь кликнув по ссылке, пользователя перекинет на случайный пост.
Заметки для кода
Код добавляет переменную запроса (add_query_var) для проверки: перенаправлять, если в переменной запроса существует запрос random и он равен random. Эта проверка используется во время события template_redirect
.
Во время перенаправления статус 307 (временное перенаправление) используется вместо 302 (перемещено временно), потому что некоторые браузеры кэшируют 302-й статус и рандома в этом случае не получится.
Возможные баги
Для плагинов страничного кэширования возможно нужно будет указать правила исключения: УРЛ которые кэшировать не нужно. Правила будут такие:
/random /index.php?random=random
На этом все. Буду рад, если кому-то пригодится.
This is somewhat embarrassing, isn’t it?
It seems we can’t find what you’re looking for. Perhaps searching can help.
В общем, возвращает 404.
А настройки ЧПУ пересохранили?
да.
Извиняюсь за глупый вопрос, а как будет выглядеть это перенаправление на случайный пост? просто ссылка? Можно ли оформить поинтереснее, чтобы привлечь внимание и люди кликали?
Поделитесь, как такое сделать?
Кстати, очень понравился модуль предварительного просмотра для комментария!
Да просто ссылка будет. Ну, вы можете её оформить в кнопку или вставить анкором картинку и будет больше внимания к ней...
Модуль вручную делался, там не все так просто, рассказать не получится.
Приветствую, подскажите, как сделать случайную запись по рубрике.
Есть сайт с стихотворениями, я хочу поставить эту кнопку в конце стихотворения, при нажатии она должна перейти на стихотворение того же автора, т.е. родительской рубрики.
В строке 'category' укажите ID своей категории
Возможно только у меня такая ошибка возникла:
После добавления кода Яндекс начал выкидывать некоторые страницы сайта из индекса и тут же "закидывать" их обратно, но уже с url site.ru/random/, а не оригинальным.
"Вылечил" Disallow: /random/ в robots.txt
или rel="nofollow" или "noindex" к ссылке добавить.
Кама, $GLOBALS['wp'] - в скобках - это префикс бд?
Это глобальная переменная $wp, в которой храниться текущий запрос.