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
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;
}
}
?>
Vous devez utiliser wp_redirect()
avant get_header()
. Dans ce cas, l'erreur d'en-tête ne s'affichera pas.
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();//....
}
});