Como redirecionar usuários para uma publicação aleatória no WordPress

Um dos novos recursos que adicionamos no nosso novo design é esse recurso chamado “Explore” que você vê proeminente em toda a nossa rede. Quando um usuário clica neste botão, eles são levados para uma publicação aleatória em um site. Anteriormente, fizemos isso para que os usuários fossem levados para uma página que exibisse uma publicação aleatória. Havia alguns problemas com isso. O principal sendo o usuário nunca conheceu o URL atual da página. Ao lançar o nosso site mais novo, list25, achamos que seria legal adicionar um botão chamado Estou curioso e deixo os usuários navegarem dessa maneira. Neste momento, eu estava falando no WordCamp Louisville. Um amigo nosso a quem eu olho por muitas coisas (@ Otto42) passou a comparecer. Durante a minha sessão, Otto escreveu esse trecho em vez de ouvir minhas conversas (como ele realmente precisava aprender). Uma história bem longa, neste artigo, mostraremos como redirecionar os usuários para uma publicação aleatória no WordPress.

Abra o arquivo functions.php do seu tema ou crie um arquivo de plugin em branco e cole o seguinte código:

add_action ('init', 'random_add_rewrite');
 function random_add_rewrite () {
        $ $ global;
        $ wp-> add_query_var ('random');
        add_rewrite_rule ('random /? $', 'index.php? random = 1', 'top');
 }

 add_action ('template_redirect', 'random_template');
 function random_template () {
        se (get_query_var ('random') == 1) {
                $ posts = get_posts ('post_type = post & orderby = rand & numberposts = 1');
                foreach ($ posts como $ post) {
                        $ link = get_permalink ($ post);
                }
                wp_redirect ($ link, 307);
                Saída;
        }
 } 

É isso e você terminou. Agora, crie um botão que liga a yourdomain.com/random/ e o trecho acima cuidará do resto.

Explicação do snippet:

Este fragmento primeiro adiciona uma variável de consulta aleatória. Então ele usa template_redirect ganhe no WordPress e diga se a variável aleatória está lá, então obtenha uma publicação do tipo de publicação “Publicar” aleatoriamente. Em seguida, faz um simples redirecionamento 307.

A razão pela qual o snippet usa o redirecionamento 307 é porque ele é um redirecionamento temporário. Os navegadores costumam esconder o redirecionamento 302 que é conhecido por redirecionamentos temporários.

Poucos insetos em que encontramos:

Se você estiver usando W3 Total Cache e você tiver armazenamento em cache de banco de dados, então você precisa adicionar as seguintes regras na lista de exclusão.

/aleatória/
/index.php?random=1

Se você estiver usando o plugin SEO WordPress da Yoast, então não use a caixa de seleção Redirecionar URLs feios na área permalinks, caso contrário este código não funcionará.

Agora, você pode criar um pequeno botão Explore como o nosso em nosso site.