¿Qué gancho se debe usar para agregar una acción que contiene una redirección?

12

Quiero crear un complemento que capture ciertos parámetros de URL de la cadena de consulta para crear una nueva cadena de consulta para la misma página. Estoy siguiendo el excelente libro de desarrollo de complementos de WordPress profesional, pero no estoy seguro de qué gancho usar para esta acción. Aquí está mi función de acción:

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

¿Qué enlaces son adecuados para las redirecciones de encabezado?

    
pregunta jnthnclrk 20.03.2011 - 13:26

3 respuestas

10

Al igual que kaiser respondió template_redirect hook es de hecho apropiado para redirecciones.

También debe usar la función wp_redirect() , en lugar de configurar el encabezado.

    
respondido por el Rarst 20.03.2011 - 15:05
15

Yo diría que template_redirect . Pero eche un vistazo a la Referencia de acción .

Ejemplo

No te olvides de exit() en la redirección.

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

Pero diría que este ejemplo de kaiser no funciona, porque después de redirigir este enlace template_redirect funciona una y otra vez, tendrás un reenvío sin fin !

Mejor es verificar, si ya estás en la página de inicio, así:

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 bien para mi ¿Alguna sugerencia? Saludos!

    
respondido por el Alex 25.09.2013 - 14:28

Lea otras preguntas en las etiquetas