J'essaie de rediriger l'utilisateur après la soumission du formulaire à l'aide de wp_redirect()
mais cela ne fonctionne pas.
Je soumets des données en utilisant le crochet d'action init
. voici le code.
function ab_process_application_form()
{
if (isset($_POST['new_application']) && isset($_POST['ab_application_nonce'])) {
if (wp_verify_nonce($_POST['ab_application_nonce'], 'ab_application_form_nonce')) {
// all $_POST and validation code
...
// add record to database
$insert_id = $db->insert($data, $format);
// trigger action after form submit
do_action('ab_application_submitted', $insert_id, $firstname, $lastname, $post_campaign);
// redirect after form submitted
wp_redirect(home_url('/application/thank-you'));
} else {
echo 'Not Verified';
} // end nonce verification
} // end check
} // end of function
// submit record on init hook
add_action('init', 'ab_process_application_form');
Le problème avec votre code est assez simple. Vous ne terminez pas l'exécution du script après avoir effectué la redirection. Donc, l'en-tête sera défini, mais le navigateur l'ignorera.
Si vous allez jeter un oeil à référence du code WP , il est clairement indiqué
Remarque: wp_redirect () ne se ferme pas automatiquement et devrait presque toujours être suivi d'un appel à quitter.
Donc, tout ce que vous avez à faire est de changer votre code comme suit:
function ab_process_application_form()
{
if (isset($_POST['new_application']) && isset($_POST['ab_application_nonce'])) {
if (wp_verify_nonce($_POST['ab_application_nonce'], 'ab_application_form_nonce')) {
// all $_POST and validation code
...
// add record to database
$insert_id = $db->insert($data, $format);
// trigger action after form submit
do_action('ab_application_submitted', $insert_id, $firstname, $lastname, $post_campaign);
// redirect after form submitted
wp_redirect(home_url('/application/thank-you'));
exit; // <-- this is the only change you need to do
} else {
echo 'Not Verified';
} // end nonce verification
} // end check
} // end of function
// submit record on init hook
add_action('init', 'ab_process_application_form');
PS Presque toujours, il sera bon d’ajouter une barre oblique à l’URL vers laquelle vous redirigez. Sinon, WP effectuera une autre redirection pour ajouter cette barre oblique.
PPS. En outre, il serait beaucoup plus agréable d'utiliser admin_post
hook au lieu de init
pour traiter les requêtes POST.