Wp_redirect et envoi de variables

12

Comment envoyer des variables avec wp_redirect () à partir du fichier function.php dans mon dossier de thème?

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

Et sur la page d'accueil, j'attraperai la variable en condition if-else pour montrer une confirmation ou non selon if $variable_to_send= '1' ou non.

Comment faire ça dans WordPress?

Derfder
la source

Réponses:

10

Je crains que vous ne puissiez pas le faire de cette façon.

wp_redirectest un moyen de fantaisie à en- tête d'envoi Locationet le second argument de cette fonction est l' état de la demande, et non variables personnalisées. (404, 301, 302, etc.).

Vous pouvez envoyer des variables en tant que paramètres get. Vous pouvez donc faire quelque chose comme ceci:

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

Ensuite, vous pouvez utiliser ces variables en tant que $_GET['my_variable']ou l'enregistrer en tant que variable get personnalisée.

Krzysiek Dróżdż
la source
1
Vous pouvez également définir un cookie, je suppose.
Ben Polinsky
Vous devez utiliser add_query_arg pour le faire à la manière de WordPress.
Shivanand Sharma
@ShivanandSharma vous le pouvez, mais il n'est pas nécessaire d'utiliser add_query_arg pour ajouter un seul argument à l'URL sans aucun autre argument de requête.
Krzysiek Dróżdż
10

Tard dans la soirée avec celui-ci, mais la "façon Wordpress" de le faire utiliserait add_query_argainsi:

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

Cela lancera une redirection vers http://my.website/?variable_to_send=1. Vous seriez alors en mesure de capturer la variable sur la page d'accueil (ou la page de blog, selon la home_url()configuration de votre page ) en accédant $_GET['variable_to_send']à votre code PHP.

Si vous voulez faire cela functions.php, assurez-vous de vous connecter à initun crochet similaire ou tôt, sinon vous obtiendrez une erreur "En-têtes déjà envoyés".

Espérons que cela aide quelqu'un qui tombe sur ce post.

brianjohnhanna
la source
6
Si vous redirigez vers une adresse locale, vous devez utiliser wp_safe_redirect().
Nathan Johnson