wp_redirect() – headers already sent

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

5

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;
    }
}     
?>

Leave a Comment