wallpaper-161589

Как перенаправить пользователей на случайный пост в WordPress

Существует такая функция на сайтах в виде кнопок, когда пользователь кликает на неё, его переносят в случайный пост на сайте. Мы посчитали, что будет интересно добавить кнопку как в гугле «Мне повезёт». В этой статье мы расскажем вам, как перенаправить пользователей на случайный пост в 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;
       }
}

Пояснение сниппета:

Этот сниппет добавляет переменную Random. После чего использует template_redirect и сообщает: если переменная random здесть, то нужно получить пост случайно. После чего происходит простое перенаправление.

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

Несколько возможных багов:

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

/random/
/index.php?random=1

Если вы используете Yoast SEO плагин, то не используйте флажок перенаправления плохих ссылок в области постоянных ссылок, иначе код не будет работать.


Наша специальность — разработка и поддержка сайтов на WordPress. Контакты для бесплатной консультации — [email protected], +371 29394520


1 ответить

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

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