Redirect not logged in users if they are on a specific page

I’ve seen this question posted before but not exactly trying to achieve what I want.

Basically what I want is:
If user is not logged in AND is on -this page- OR -this page- OR -this page,
redirect him to -this page- (which is a custom registration page)

Read More

I’m tweaking this piece of code, but it’s not working. I’ll appreciate any type of guidance.

<?php
function redirect_non_logged_in(){
  // if user is not logged and is on this pages
  if( !is_user_logged_in() && is_page( array( 250, 253 ) ) { 
    //This redirects to the custom login page.
    wp_redirect(site_url('/user-registration'));
    exit();
  }
}
add_filter('get_header','redirect_non_logged_in');
?>

Related posts

Leave a Reply

2 comments

  1. Your function is fine, but 'get_header' it’s too late.

    Use template_redirect instead:

    add_action( 'template_redirect', function() {
    
      if ( is_user_logged_in() || ! is_page() ) return;
    
      $restricted = array( 250, 253 ); // all your restricted pages
    
      if ( in_array( get_queried_object_id(), $restricted ) ) {
        wp_redirect( site_url( '/user-registration' ) ); 
        exit();
      }
    
    });
    

    Be sure to not include ‘user-registration’ page id in $restricted array or you’ll experience an endless redirect…