To create a menu visible only to logged‑in users…and show a different menu to the public, the key idea is:
- Public users → see Menu A
- Logged‑in Premium users → see Menu B
You can achieve this using:
- User roles (best if Premium users have a special role)
- Membership plugins (MemberPress, Paid Memberships Pro, WooCommerce Memberships, etc.)
- Code-based menu switching (lightweight and flexible)
Let’s go through the simplest and most powerful method.
Method 1 — Use WordPress roles + conditional menus (recommended)
If your Premium users have a special role (e.g., premium, subscriber_plus, etc.), you can conditionally load a different menu.
Step 1 — Create two menus
- Menu Public
- Menu Premium
Step 2 — Add this code to functions.php or Code Snippets:
function custom_menu_for_premium_users( $args ) {
// Replace 'premium' with your actual role name
if ( is_user_logged_in() && current_user_can( 'premium' ) ) {
if ( $args['theme_location'] === 'primary' ) {
$args['menu'] = 'Menu Premium'; // name or ID of your premium menu
}
}
return $args;
}
add_filter( 'wp_nav_menu_args', 'custom_menu_for_premium_users' );
Result
- Logged‑in Premium users see Menu Premium
- Everyone else sees Menu Public
This is lightweight, fast, and doesn’t require plugins.
Method 2 — Use a membership plugin (no code)
If you’re using:
- MemberPress
- Paid Memberships Pro
- WooCommerce Memberships
- Restrict Content Pro
…these plugins let you restrict menu items or entire menus based on membership level.
You simply:
- Edit a menu item
- Choose “Visible to: Premium Members Only”
- Save
This is the easiest if you already use a membership system.
Method 3 — Use the “If Menu” plugin (simple, no coding)
Install:
If Menu – Visibility control for menu items
Then you can set conditions like:
- “Show only if user is logged in”
- “Show only if user has role Premium”
- “Hide if user is logged out”
This works well for small sites.