I am trying to use wp_redirect()
to redirect the user after successfully submitting a signup form on the page.
It’s not working and shows the following error:
Warning: Cannot modify header information – headers already sent by
(output started at
/Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10)
in /Applications/MAMP/htdocs/theme/wp-includes/pluggable.php on line
1178
I understand there has been already output before, that’s why it’s not working, but I have no clue how to make this work.
The signup form gets rendered by a function, and is submitted by another function, inside my functions.php.
if ( isset( $_POST['subscribe'] ) ) {
// Submits the form and should then redirect
wp_redirect("/thank-you/");
exit;
}
Then both these functions are used where I want to show the signup form.
I’m afraid that’s not the best thing to do. I should be creating some action that does that, but I have no idea how to implement that. Most of the tutorials I found show the results directly on the same page and don’t require an additional redirect. Maybe that’s why they are working with functions inside the functions.php
Found the answer (via)
Instead of using the function I added an action to “wp_loaded”, that makes sure that it gets loaded before any headers are sended.
<?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;
}
}
?>