WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Whenever I use wp_redirect(plugins_url('account/login')); in a shortcode function I get the following error:

Warning: Cannot modify header information - headers already sent by ...

Is there any way to redirect from there? My guess would to echo some Javascript that does the redirect from me, but I was wondering whether there would be a server-side implementation of this.

share|improve this question
check in your functions.php, did you have closing ?> tag at the end ? if yes remove it and try again – pr1nc3 Oct 11 '13 at 18:08
@wordpresser there are no closing ?> in any of my plugin files – Joren Oct 11 '13 at 18:11
You are most likely hooking it too late. How do you implement it? – birgire Oct 11 '13 at 18:12
where are you trying to use it? you can't send headers after content output has started. – Milo Oct 11 '13 at 18:12
I'm indeed using it from within a shortcode function. Any way to redirect from there? – Joren Oct 11 '13 at 18:18

Why does it need to be a Shortcode? Looks like a XY Problem.

You're already inserting the shortcode manually in the edit screen. Use a Custom Field instead and hook earlier where you can actually do the redirect.

enter image description here

add_action( 'template_redirect', function(){
    global $post;
    $redirect = get_post_meta( $post->ID, 'redirect', true );
    if( $redirect )
        wp_redirect( admin_url( 'profile.php' ) );
share|improve this answer
Also, redirecting to plugins_url('account/login') doesn't sound like a good idea... – brasofilo Oct 11 '13 at 21:51

To redirect to another page you need to set an http header. To set an header it has to be the first thing that is output to the browser.

You are trying to set an header when something already has been output to the browser, that's why you get the warning and the redirect doesn't work.

You need to change your implementation so that the redirect is triggered before anything got output. So you should hook it to init or any other action that happens before output.

This can also happen due to another plugin which incorrectly outputs something when it shouldn't.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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