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


16

Quiero construir un complemento que tome ciertos parámetros de URL de la cadena de consulta para crear una nueva cadena de consulta para la misma página. Sigo el excelente libro Professional WordPress Plugin Development, 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é ganchos son adecuados para redireccionamientos de encabezado?


¿Realmente desea cambiar la URL final o solo las variables utilizadas en WP_Query?
scribu

El código que ha publicado básicamente redirigirá cada página, ¿es eso lo que desea? ¿Bajo qué condiciones debería ocurrir esta redirección? NOTA: He hecho +1 en Kaiser de todos modos, template_redirecttambién sería mi sugerencia.
t31os

scribu, quiero cambiar la url final y la cadena de consulta.
jnthnclrk

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

¿Cuál fue el resultado? Marcar una solución por favor.
kaiser

Respuestas:



17

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

Ejemplo

No te olvides de exit()redirigir.

/**
 * 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' );

8

Pero diría que este ejemplo de Kaiser no puede funcionar, porque después de una redirección, este gancho 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 para mi bien. ¿Alguna sugerencia? ¡Saludos!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.