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

10

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- comprend / pluggable.php sur la ligne 1178

Je comprends qu'il y a déjà eu une sortie avant, c'est pourquoi cela ne fonctionne pas, mais je ne sais pas comment faire fonctionner cela.

Le formulaire d'inscription est rendu par une fonction, et est soumis par une autre fonction, dans mon 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 là où je veux afficher le formulaire d'inscription.

J'ai bien peur que ce ne soit pas la meilleure chose à faire. Je devrais créer une action qui fait cela, mais je n'ai aucune idée de comment mettre en œuvre cela. La plupart des tutoriels que j'ai trouvés montrent les résultats directement sur la même page et ne nécessitent pas de redirection supplémentaire. C'est peut-être pour cela qu'ils travaillent avec des fonctions à l'intérieur du fichier functions.php

Boule de neige
la source

Réponses:

15

Trouvé la réponse (via)

Au lieu d'utiliser la fonction, j'ai ajouté une action à "wp_loaded", qui garantit qu'elle est chargée avant l'envoi des en-têtes.

<?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;
    }
}     
?>
Boule de neige
la source
Il s'est débarrassé de l'erreur mais le message n'a pas été enregistré!
Subrata Sarkar
6

Vous devez utiliser wp_redirect() avant get_header() Alors il ne montrera pas d'erreur d'en-tête.

mynamAvinash
la source
3
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();//....
}
});
Abhisek Malakar
la source
Merci pour l'aide, mais ce code n'a pas fonctionné pour moi. Nécessaire pour ajouter l'action à "wp_loaded" (Voir ma réponse)
Snowball
Fonctionne bien si vous devez établir is_page_template()une redirection conditionnelle.
Lawless
1

vous pouvez aussi faire ça

Au lieu de la ligne ci-dessous

wp_redirect ("$ url");

écrire

echo("<script>location.href = '".$url."'</script>");

ou

<?php <script><?php echo("location.href = '".$url."';");?></script>?>

Cela résoudra certainement votre problème.

Graphiques Hadid
la source