WordPress : 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 – les en-têtes ont déjà été envoyés par (la sortie a commencé à /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) dans /Applications/MAMP/htdocs/theme/wp- includes/pluggable.php à la ligne 1178
Je comprends qu’il y a déjà eu une sortie auparavant, c’est pourquoi cela ne fonctionne pas, mais je n’ai aucune idée de comment faire fonctionner cela.
Le formulaire d’inscription est rendu par une fonction et est soumis par une autre fonction, à l’intérieur de 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 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 cela en uvre. La plupart des tutoriels que j’ai trouvés affichent 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 dans functions.php
Solution n°1 trouvée
Vous devez utiliser wp_redirect()
avant get_header()
Ensuite, il n’affichera pas d’erreur d’en-tête.
Solution n°2 trouvée
Trouvé la réponse (via)
Au lieu d’utiliser la fonction, j’ai ajouté une action à « wp_loaded », qui s’assure qu’il est chargé 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;
}
}
?>
Solution n°3 trouvée
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();//....
}
});
0 commentaire