redirect private page to login first then display page in Wordpress
This is the right way to do
add_action('wp', 'redirect_private_page_to_login');function redirect_private_page_to_login(){ global $wp_query; $queried_object = get_queried_object(); if ($queried_object->post_status == "private" && !is_user_logged_in()) { wp_redirect(home_url('/login?redirect='.get_permalink($queried_object->ID))); } }
I had a few problems with Tu Bui's answer. Here is an improved version.
add_action( 'wp', 'redirect_private_page_to_login' );function redirect_private_page_to_login(){ $queried_object = get_queried_object(); if ( isset( $queried_object->post_status ) && 'private' === $queried_object->post_status && ! is_user_logged_in() ) { wp_safe_redirect( wp_login_url( get_permalink( $queried_object->ID ) ) ); exit; }}
Here is the same code in a small plugin: https://github.com/wearerequired/private-page-login