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

Publié par Jean-Michel le

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();//....
}
});
Catégories : Wordpress

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *