Posted on

Restricting the search for non-logged-in users

There was an interesting support question:

I have website with logged-in users as well as non-logged-in users.

The logged-in user should be able to search through everything on the website, but the non-logged-in users should only be able to search the user profiles.

Is it at all possible to differentiate the searches like this?

The answer is, of course, yes, and it’s really quite simple, too. There’s no need to build two separate searches on the site. Every post that Relevanssi shows to users passes through the relevanssi_post_ok filter which determines whether the current user is allowed to see the post. This filter can be used to build this functionality. The code looks like this:

add_filter( 'relevanssi_post_ok', 'rlv_limit_users', 11, 2 );
function rlv_limit_users( $show, $post_id ) {
    if ( ! is_user_logged_in() ) {
        $post = relevanssi_premium_get_post( $post_id, get_current_blog_id() );
        if ( 'user' !== $post->post_type ) {
            $show = false;
        }
    }
    return $show;
}

This goes to the theme functions.php. If the user is logged in (is_user_logged_in() returns true), nothing is done, and the posts are shown to the user as usual. If the user is not logged in, Relevanssi then fetches the post object using relevanssi_premium_get_post() (this is necessary instead of regular get_post(), because user profiles are involved) and if the post type is not set to user, the function returns false and the post is not shown to the user.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.