You need to hide a post from non-logged-in users. Or show certain pages only to Editors. Or create subscriber-only content.
The typical advice? Install a membership plugin with 50 features you don't need.
Here's how to do role-based content visibility with just PHP no bloated plugins required.
The Core Concept
WordPress already has a robust role and capability system. Every user has a role (administrator, editor, author, subscriber, etc.), and each role has capabilities.
We can leverage this to control content visibility at two levels:
Post/page level entire posts visible only to certain roles
Content level specific sections within a post
Method 1: Filter Posts by Role (Query Level)
This approach hides posts from archive pages and search results:
/** * Filter posts based on user role */ function filter_posts_by_role ( $query ) { // Only on frontend, main queries, not single posts if ( is_admin () || !…