Quando postagens já estão indexadas pelos mecanismos de busca, como Google e Bing, há algum tempo fica complicado mudar um blog do WordPress de domínio.
No meu caso eu precisava mudar apenas alguns posts de categorias específicas para um outro subdomínio do meu site. O objetivo era redirecionar os posts relacionados com artes para o meu novo blog sobre arte.
Depois de pesquisar um pouco acabei chegando em uma solução razoável.
Criei o novo blog com WordPress, importei o conteúdo das categorias específicas para o mesmo e coloquei em um novo subdomínio.
No meu blog atual, este que você está lendo agora, no arquivo functions.php do template adicionei o código abaixo.
add_action('template_redirect', 'redirect_category_posts'); function redirect_category_posts() { global $post; if (is_single($post->ID) && ( in_category('ilustracoes', $post) || in_category('ilustracao-em-acao', $post) || in_category('hqs', $post) || in_category('ecomic-hqs', $post) || in_category('tailer-hqs', $post) || in_category('video', $post) || in_category('quick-sketch', $post) )) { $new_url = str_replace('http://mbeck.com.br', 'http://arte.mbeck.com.br', get_permalink($post->ID)); wp_redirect($new_url, 301); exit; } }
Linha por Linha
A primeira linha adiciona uma nova ação ao template.
add_action('template_redirect', 'redirect_category_posts');
Em seguida eu crio a função e utilizo a global $post do WordPress. Nela teremos os dados da publicação.
function redirect_category_posts() { global $post;
Adiciono uma condição para verificar se estamos em um post único através do $post->ID. Para verificar se encaixa em uma das categorias especificadas uso a função in_category do WordPress.
if (is_single($post->ID) && ( in_category('ilustracoes', $post) || in_category('ilustracao-em-acao', $post) || in_category('hqs', $post) || in_category('ecomic-hqs', $post) || in_category('tailer-hqs', $post) || in_category('video', $post) || in_category('quick-sketch', $post) )) {
Em seguida monto a URL que será utilizada para o redirecionamento substituindo o domínio antigo pelo novo com a função str_replace do PHP. Para pegar o link permanente do post eu uso a função get_permalink do WordPress.
$new_url = str_replace('http://mbeck.com.br', 'http://arte.mbeck.com.br', get_permalink($post->ID));
Lembrando que quando criei outro blog com o WordPress e importei o conteúdo do antigo eu utilizei exatamente o mesmo formato de URL (permalink) para os posts do novo blog que eu utilizava no antigo.
Para fechar, utilizo a função wp_redirect do WordPress, com um código 301 (código HTTP que significa movido permanentemente), e termino com um exit.
wp_redirect($new_url, 301); exit; } }
E voilá! Está funcionando como o esperado.
Se ficou alguma dúvida comente abaixo.
Nos vemos na próxima.