Перенаправлення на випадковий запис у WordPress

У цій нотатці я покажу, як перенаправляти користувачів на випадковий запис WordPress.

Для деяких типів сайтів, наприклад розважальних, де кожен запис може бути цікавим і не застаріває особливо з часом, може стати в нагоді сторінка, яка показує випадковий пост.

Така навігація буде працювати так: вставляєте в шаблон посилання, натиснувши на яку користувача перекине на випадковий запис.

Реалізація

  1. Вставте наступний код у файл шаблону 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;
}
  1. Зайдіть в адмін-панель: Установки > постійні посилання та просто натисніть кнопку “Зберегти зміни”. Потрібно це, щоб правила перезапису УРЛ перезбереглися і додалося наше нове правило.

  2. Вставте посилання 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

На цьому все. Радий, якщо комусь знадобиться.

Залишити коментар

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