¿Qué hook debe usarse para agregar una acción que contiene una redirección?

20 mar 2011, 14:26:18
Vistas: 33.4K
Votos: 22

Quiero crear un plugin que tome ciertos parámetros url de la cadena de consulta para construir una nueva cadena de consulta para la misma página. Estoy siguiendo el excelente libro Professional WordPress Plugin Development, pero no estoy seguro de qué hook 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é hooks son adecuados para las redirecciones mediante header?

5
Comentarios

¿Realmente quieres cambiar la URL final o solo las variables usadas en WP_Query?

scribu scribu
20 mar 2011 15:13:32

El código que has publicado básicamente redirigiría cada página, ¿es eso lo que quieres? ¿Bajo qué condiciones debería ocurrir esta redirección? NOTA: De todos modos le he dado +1 a kaiser, template_redirect también sería mi sugerencia.

t31os t31os
20 mar 2011 16:03:29

scribu, quiero cambiar la URL final y la cadena de consulta.

jnthnclrk jnthnclrk
24 mar 2011 17:03:35

t31os, simplifiqué mi código para la pregunta. Lo real contiene más condiciones.

jnthnclrk jnthnclrk
24 mar 2011 17:04:48

¿Cuál fue el resultado? Por favor marca una solución.

kaiser kaiser
24 oct 2011 15:56:29
Todas las respuestas a la pregunta 3
0
25

Yo diría template_redirect. Pero echa un vistazo a la Referencia de Acciones.

Ejemplo

No olvides hacer exit() al redireccionar.

/**
 * Este ejemplo redirige todo a la página index.php
 * Puedes hacer lo mismo para el escritorio con admin_url( '/' );
 * O simplemente basar la redirección en condicionales como
 * funciones is_*(), current_user_can( 'capability' ), globales, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

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

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );
20 mar 2011 15:59:42
1
18

Como respondió kaiser, el hook template_redirect es efectivamente apropiado para redirecciones.

También deberías usar la función wp_redirect(), en lugar de configurar manualmente los encabezados.

20 mar 2011 16:05:08
Comentarios

Gracias por la sugerencia, no me importaría saber por qué wp_redirect es preferible, aquí: http://wordpress.stackexchange.com/questions/12944/why-is-wp-redirect-preferable-to-a-standard-php-header-redirect

jnthnclrk jnthnclrk
24 mar 2011 17:11:00
0
13

Pero diría que este ejemplo de kaiser no puede funcionar, porque después de un redireccionamiento este hook template_redirect se ejecuta una y otra vez, ¡tendrás un redireccionamiento infinito!

Es mejor 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 mí. ¿Alguna sugerencia? ¡Saludos!

25 sept 2013 15:28:51