Qual gancho deve ser usado para adicionar uma ação que contém um redirecionamento?

16

Quero criar um plug-in que agarra determinados parâmetros de URL da string de consulta para criar uma nova string de consulta para a mesma página. Estou seguindo o excelente livro Desenvolvimento profissional de plugins do WordPress, mas não tenho certeza de qual gancho usar para esta ação. Aqui está minha função de ação:

add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
    header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>

Quais ganchos são adequados para redirecionamentos de cabeçalho?

jnthnclrk
fonte
Deseja realmente alterar o URL final ou apenas as variáveis ​​usadas no WP_Query?
Scrib # 20/03
O código que você postou basicamente redirecionaria todas as páginas, é isso que você deseja? Sob quais condições esse redirecionamento deve ocorrer? OBSERVAÇÃO: marquei +1 kaiser de qualquer maneira, template_redirecttambém seria minha sugestão.
T31os
scribu, quero alterar o URL final e a string de consulta.
Jnthnclrk
t31os, simplifiquei meu código para a pergunta. A coisa real contém mais condições.
jnthnclrk
Qual foi o resultado? Marque uma solução pls.
Kaiser #

Respostas:

13

Como o kaiser, o template_redirectgancho respondido é realmente apropriado para redirecionamentos.

Além disso, você deve usar a wp_redirect()função, em vez de definir o cabeçalho.

Rarst
fonte
Obrigado pela sugestão, não se importaria saber por wp_redirect é preferível, aqui: wordpress.stackexchange.com/questions/12944/...
jnthnclrk
17

Eu diria template_redirect. Mas dê uma olhada na Referência de Ação .

Exemplo

Não se esqueça de exit()redirecionar.

/**
 * This example redirects everything to the index.php page
 * You can do the same for the dashboard with admin_url( '/' );
 * Or simply base the redirect on conditionals like 
 * is_*() functions, current_user_can( 'capability' ), globals, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

    exit( wp_redirect( home_url( '/' ) ) );

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );
kaiser
fonte
8

Mas eu diria que este exemplo do kaiser não pode funcionar porque, após um redirecionamento, esse gancho template_redirect funciona novamente e você terá um encaminhamento sem fim !

Melhor é verificar, se você já está na página inicial, assim:

function wpse12535_redirect_sample() {

    $current_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $site_url = get_bloginfo('siteurl') . "/";

    if($current_url != $site_url)       
      exit( wp_redirect( home_url( '/' ) ));    

}
add_action( 'template_redirect', 'wpse12535_redirect_sample');

Funciona bem para mim. Alguma sugestão? Saudações!

Alex
fonte