Wp_redirect y envío de variables

12

¿Cómo enviar algunas variables con wp_redirect () desde el archivo function.php en mi carpeta de temas?

if ( $post_id ) {
    $variable_to_send = '1';
    wp_redirect( home_url(), $variable_to_send );
    exit;
}

Y en la página de inicio, capturaré la variable en condición if-else para mostrar alguna confirmación o no dependiendo de si $variable_to_send= '1' o no.

¿Cómo hacer eso en WordPress?

Derfder
fuente

Respuestas:

10

Me temo que no puedes hacerlo de esta manera.

wp_redirectes una forma elegante de enviar encabezado Locationy el segundo argumento de esta función es el estado de la solicitud y no la variable personalizada. (404, 301, 302, y así sucesivamente).

Puede enviar algunas variables como parámetros de obtención. Entonces puedes hacer algo como esto:

if ( $post_id ) {
        $variable_to_send = '1';
        wp_redirect( home_url() .'?my_variable='.$variable_to_send );
        exit;
}

Luego puede usar estas variables como $_GET['my_variable']o registrarlo como variable de obtención personalizada.

Krzysiek Dróżdż
fuente
1
También podría establecer una cookie, supongo.
Ben Polinsky
Debe usar add_query_arg para hacerlo a la manera de WordPress.
Shivanand Sharma
@ShivanandSharma puede, pero no es necesario usar add_query_arg para agregar solo un argumento a la URL sin ningún otro argumento de consulta.
Krzysiek Dróżdż
10

Tarde a la fiesta con este, pero la "forma de Wordpress" para hacerlo sería add_query_argasí:

if ( $post_id ) {
    wp_redirect( esc_url( add_query_arg( 'variable_to_send', '1', home_url() ) ) );
    exit;
}

Esto iniciará una redirección a http://my.website/?variable_to_send=1. Podrá capturar la variable, entonces, en la página de inicio (o página de blog, dependiendo de cómo home_url()esté configurada) accediendo $_GET['variable_to_send']a su código PHP.

Si va a hacer esto functions.php, asegúrese de enganchar inito un enganche temprano similar o de lo contrario obtendrá un error "Encabezados ya enviados".

Esperemos que esto ayude a alguien que tropieza con esta publicación.

brianjohnhanna
fuente
66
Si está redirigiendo a una dirección local, debe usar wp_safe_redirect().
Nathan Johnson el