Using auth_redirect returns cannot modify header information

I’m hooking auth_redirect to wp_head, but it’s returning cannot modify header information. Do I have to hook it to a different action? Something that loads before wp_head? I tried hooking it to get_headers and send_headers, but then it didn’t even work.

Any ideas? Thanks!

Read More
add_action('wp_head','check_if_logged_in');


function check_if_logged_in() {
  $pageid = get_option('sd_page_id');
  if ( !is_user_logged_in() && is_page($pageid) ) {
      auth_redirect();
  }
}

Also, to clarify, for some reason it works in localhost but not on my server. Weird.

Related posts

Leave a Reply

1 comment

  1. It works fine on my localhost as well.

    The reason it probably doesn’t work on your server is that it’s not using output buffering. Hooking into wp_head means that the page has already started printing to the client’s screen. Meaning auth_redirect‘s use of wp_redirect will fail: the headers have already been sent and you see the “headers already sent” error.

    Try hooking into template_redirect instead of wp_head. I wouldn’t use auth_redirect here either. You’re already checking if the user is logged in (which auth_redirect does as well). Simply sent users to the login page with an appropriate “redirect_to” argument if they aren’t logged in.

    <?php
    add_action('template_redirect','wpse64899_check_if_logged_in');
    function wpse64899_check_if_logged_in()
    {
        $pageid = 2; // or whatever you want it to be
        if(!is_user_logged_in() && is_page($pageid))
        {
            $url = add_query_arg(
                'redirect_to',
                get_permalink($pagid),
                site_url('wp-login.php')
            );
            wp_redirect($url);
            exit;
        }
    }