Перенаправлення на випадковий запис у 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
На цьому все. Радий, якщо комусь знадобиться.