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

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.

add_action ('wp_loaded', 'my_custom_redirect');
function my_custom_redirect() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redirect = 'http://example.com/redirect-example-url.html';
|improve this answer|||||
  • It got rid of the error but the post did not save! – Subrata Sarkar Feb 23 '17 at 14:24

You have to use wp_redirect() before get_header() Then it will not show header error.

|improve this answer|||||
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
|improve this answer|||||
  • Thanks for the help, but that code didn't worked for me. Needed to add the action to "wp_loaded" to get it worked (See my answer) – Snowball Feb 23 '15 at 12:09
  • Works well if you need to establish is_page_template() when conditionally redirecting. – Lawless 2 days ago

you can also do this

Instead of the below line



echo("<script>location.href = '".$url."'</script>");


<?php <script><?php echo("location.href = '".$url."';");?></script>?>

It'll definitely solve your problem.

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.