Skip to main contentSkip to footer

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;
}

Add this to your site. 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.

The code above requires Relevanssi Premium (and only makes sense with it, because you can’t search user profiles without Premium). If you want to apply this to other post types, this version is compatible with the free Relevanssi:

add_filter( 'relevanssi_post_ok', 'rlv_limit_post_types', 11, 2 );
function rlv_limit_post_types( $show, $post_id ) {
    if ( ! is_user_logged_in() ) {
        $post = get_post( $post_id );
        if ( 'your_custom_post_type' !== $post->post_type ) {
            $show = false;
        }
    }
    return $show;
}

Your account

Not logged in. Log in to see your license details.

Search

Popular Resources

Gmedia photo gallery tags
Gmedia photo gallery gives a false impression of working with Relevanssi, as you can see the gmedia_tag taxonomy appear in…
Elementor
Elementor is a popular page builder. It works rather well with Relevanssi, most of the time. Check for e_search_props If…
Debugging Relevanssi searching issues

…restrictions involved? Look at the results add_filter( ‘relevanssi_results’, ‘rlv_check_results’ ); function rlv_check_results( $results ) { var_dump( $results ); exit(); } This should print out an array of ( post ID, post weight ) pairs. Does that match the number of results you expect to find? Look at the posts returned…Relevanssi has plenty of useful filter hooks you can use to debug problems. Here are some examples of how you can use the Relevanssi filter hooks to debug issues. Add the functions one at a time to your site and run a search to see results. First, try the Relevanssi……admin search. Before checking the filters, try the Relevanssi admin search (Dashboard > Admin search). Does that find the correct results? If it does, then the problem is likely with your theme. Use Query Monitor Query Monitor is a superb tool for debugging WordPress behaviour. It’s very useful for debugging…

Related Posts:

Comment Section:

3 Comments. Leave new

Leave a Reply

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

Fill out this field
Fill out this field
Please enter a valid email address.
You need to agree with the terms to proceed