Qual gancho deve ser usado para adicionar uma ação contendo um redirecionamento?

12

Eu quero criar um plug-in que capture 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 Professional Plugin Development do WordPress, mas não tenho certeza qual gancho usar para esta ação. Aqui está a 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?

    
por jnthnclrk 20.03.2011 / 13:26

3 respostas

10

Como o kaiser respondeu que template_redirect hook é realmente apropriado para redirecionamentos.

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

    
por Rarst 20.03.2011 / 15:05
15

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

Exemplo

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

/**
 * 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' );
    
por kaiser 20.03.2011 / 14:59
6

Mas eu diria que este exemplo do kaiser não funciona, porque depois de um redirecionamento esse gancho template_redirect funciona de novo e de novo, você terá um encaminhamento infinito !

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? Atenciosamente!

    
por Alex 25.09.2013 / 14:28