Display Different WordPress Menu to Logged in Users
When creating a WordPress website you may run into scenarios where you would like to display different WordPress menus depending on if a WordPress User is Logged In or Logged Out.
For example. you may have a WordPress membership site and you would like to display different WordPress menus to your logged in users. In this blog, we will show you how to how to show different WordPress menus to logged in users in WordPress.
Don't Want To Touch Any Code?
Have one of our WordPress Experts add the following code snippets for you. Chill out while we do the hard work.
Get HelpCreating the new WordPress Menus
In WordPress even if your theme has one menu location, you can still create multiple WordPress menus for the same location.
Go to Appearance > Menus, create two menus logged-in and logged-out.
// Conditional Nav Menu
function wpc_wp_nav_menu_args( $args = '' ) {
if( is_user_logged_in() ) {
$args['menu'] = 'logged-in';
} else {
$args['menu'] = 'logged-out';
}
return $args;
}
add_filter( 'wp_nav_menu_args', 'wpc_wp_nav_menu_args' );
If you’re trying to target a specific menu location created by your theme, you can use the following:
// Conditional Nav Menu
function wpc_wp_nav_menu_args( $args = '' ) {
if( is_user_logged_in()) {
if( 'top-navigation' == $args['theme_location'] ) { // Change top-navigation to theme specific name
$args['menu'] = 'logged-in';
}
} else {
if( 'top-navigation' == $args['theme_location'] ) { // Change top-navigation to theme specific name
$args['menu'] = 'logged-out';
}
}
return $args;
}
add_filter( 'wp_nav_menu_args', 'wpc_wp_nav_menu_args' );
That’s all you will see that your logged in visitors will see the logged-in menu and the non-registered or logged out users will see a different menu.
This method allows you to create two different menus for your users so that you can freely update your menus for logged in or logged our users. We hope this blog topic helps you show different menus to logged in users in your WordPress site. For questions please leave a comment below.