web-dev-qa-db-fra.com

Wp_redirect et envoi de variables

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, je vais attraper la variable dans la condition if-else pour montrer une confirmation ou non, selon que $variable_to_send = '1' ou pas.

Comment faire cela dans WordPress?

11
Derfder

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

wp_redirect est un moyen élégant d'envoyer l'en-tête Location et le deuxième argument de cette fonction est status de la requête et non une variable personnalisée. (404, 301, 302, etc.).

Vous pouvez envoyer certaines variables en tant que paramètres get. Donc, vous pouvez faire quelque chose comme ça:

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.

9
Krzysiek Dróżdż

En retard à la fête avec celui-ci, mais la "méthode Wordpress" pour le faire utiliserait add_query_arg like so:

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

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

Si vous envisagez de le faire dans functions.php, assurez-vous d’accroche sur init ou un autre exemple similaire, sinon vous obtiendrez une erreur "En-têtes déjà envoyés".

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

7
brianjohnhanna