Одной из новых функций, которые мы добавили в наш новый дизайн, эта функция называется “знакомства”. При нажатии пользователем на кнопку, происходит перенаправление на случайный пост на сайте. Ранее, мы сделали так, что пользователи не были направлены на страницу, которая будет отображать случайный пост. Было несколько проблем с этим. Одна из которых была в том что пользователь не знал фактический URL страницы. Во время моей сессии, я написал этот фрагмент. Ну короче говоря, в этой статье, мы расскажем, как перенаправлять пользователей на случайный пост.
Откройте ваш файл темы functions.php или создайте пустой файл плагина и вставьте нижеприведенный код:
add_action('init','add_random_rewrite'); function add_random_rewrite() { global $wp; $wp->add_query_var('random'); add_rewrite_rule('random/?$', 'index.php?random=1','top'); } add_action('template_redirect','template_random'); function template_random() { if (get_query_var('random') == 1) { $ran_posts = get_posts('post_type=post&orderby=rand&numberposts=1'); foreach($ran_posts as $ran_post) { $ran_link = get_permalink($ran_post); } wp_redirect($ran_link,307); exit; } }
Вот и все, что Вам надо сделать. Теперь создадим кнопку, со ссылкой на yourdomain.com/random/, а фрагмент выше позаботиться об остальном.
Объяснение фрагмента:
Этот фрагмент сначала добавляет в запрос случайную переменную. Затем он использует template_redirect из WordPress, получает пост случайным образом. Потом делает простой 307 редирект.
Поэтому сниппет использует 307 редирект (временное перенаправление). Браузеры часто кэшируют 302 редирект, который становится известен, как временное перенаправление.
Несколько ошибок с которыми мы столкнулись:
Если у Вас стоит плагин W3 Total Cache и у вас есть кэширование на базу данных, то Вам необходимо применить следующие правила:
/random/
/index.php?random=1
Если вы пользуетесь плагином Yoast’s WordPress SEO, то не используйте флажок перенаправление сломанных URL иначе наш код не будет работать.
Теперь вы можете создать и изучить кнопки которые есть на нашем сайте.