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?

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.


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.


6
Si vous redirigez vers une adresse locale, vous devez utiliser wp_safe_redirect().
Nathan Johnson
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.