web-dev-qa-db-fra.com

wp_redirect () - en-têtes déjà envoyés

J'essaie d'utiliser wp_redirect() pour rediriger l'utilisateur après avoir soumis avec succès un formulaire d'inscription sur la page.

Cela ne fonctionne pas et affiche l'erreur suivante:

Avertissement: impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à/Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) dans/Applications/MAMP/htdocs/theme/wp- includes/pluggable.php sur la ligne 1178

Je comprends qu'il y ait déjà eu des sorties auparavant, c'est pourquoi cela ne fonctionne pas, mais je ne sais pas comment faire pour que cela fonctionne.

Le formulaire d'inscription est rendu par une fonction et est soumis par une autre fonction, à l'intérieur de functions.php.

if ( isset( $_POST['subscribe'] ) ) {
    // Submits the form and should then redirect
    wp_redirect("/thank-you/");
    exit;
}

Ensuite, ces deux fonctions sont utilisées lorsque je souhaite afficher le formulaire d’inscription.

Je crains que ce ne soit pas la meilleure chose à faire. Je devrais créer quelque chose qui fasse ça, mais je ne sais pas comment le mettre en œuvre. La plupart des tutoriels que j'ai trouvés montrent les résultats directement sur la même page et ne nécessitent aucune redirection supplémentaire. Peut-être est-ce la raison pour laquelle ils travaillent avec des fonctions à l'intérieur de functions.php

9
Snowball

Trouvé la réponse (via)

Au lieu d'utiliser la fonction, j'ai ajouté une action à "wp_loaded", qui s'assure qu'elle est chargée avant que les en-têtes ne soient envoyés.

<?php
add_action ('wp_loaded', 'my_custom_redirect');
function my_custom_redirect() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redirect = 'http://example.com/redirect-example-url.html';
        wp_redirect($redirect);
        exit;
    }
}     
?>
15
Snowball

Vous devez utiliser wp_redirect() avant get_header(). Dans ce cas, l'erreur d'en-tête ne s'affichera pas.

4
mynamAvinash
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// make this condition such that it only matches when a registraiotn form get submitted
/**
 * do your stuff here
 */
wp_redirect();//....
}
});
2
Abhisek Malakar