I’m not sure I understand your setup, but here are few ideas:
A) Display a login link with the redirect_to
parameter set:
You could add the following to your custom template pages:
if( ! is_user_logged_in() )
{
printf( '<a href="https://wordpress.stackexchange.com/questions/169704/%s">%s</a>',
wp_login_url( get_permalink() ),
__( 'You need to login to view this page!' )
);
}
This will generate a login link, for anonymous visitors, with the current page in the redirect_to
GET parameter.
B) Redirect to the wp-login.php
with the redirect_to
parameter set:
Notice that the call to wp_redirect()
must happen before the HTTP headers are sent.
We can call it within the template_redirect
hook:
add_action( 'template_redirect',
function()
{
if( ! is_user_logged_in()
&& is_page( array( 'member-page-1', 'member-page-2' ) )
)
{
wp_safe_redirect( wp_login_url( get_permalink() ) );
exit();
}
}
);
where we restrict the access to pages with the slugs member-page-1
and member-page-2
.
C) The native login form (in-line):
Another option would be to include the native login form, directly into the page content:
add_filter( 'the_content', function( $content ) {
if( ! is_user_logged_in()
&& is_page( array( 'member-page-1', 'member-page-2' ) )
)
$content = wp_login_form( array( 'echo' => 0 ) );
return $content;
}, PHP_INT_MAX );
where we restrict the access to pages with the slugs member-page-1
and member-page-2
.
Notice you would have to take care of the archive/index/search pages.
Update: I simplified it by using the wp_login_url()
function.