MemberPress: Show Menu Items Only to Certain Memberships
Hides navigation menu items from people who don't hold a given MemberPress membership, using a CSS class like wpide-mepr-123 on the menu item.
Opens WPIDE on
Code
if ( ! class_exists( 'MeprUser' ) ) {
return;
}
add_filter( 'wp_nav_menu_objects', function ( $items ) {
$member = is_user_logged_in() ? new MeprUser( get_current_user_id() ) : null;
$removed = array();
foreach ( $items as $key => $item ) {
$wanted = array();
foreach ( (array) $item->classes as $class ) {
if ( preg_match( '/^wpide-mepr-(\d+)$/', $class, $m ) ) {
$wanted[] = (int) $m[1];
}
}
$hide = in_array( (int) $item->menu_item_parent, $removed, true );
if ( $wanted && ! current_user_can( 'manage_options' ) ) {
$allowed = false;
foreach ( $wanted as $membership_id ) {
if ( $member && $member->is_already_subscribed_to( $membership_id ) ) {
$allowed = true;
break;
}
}
$hide = $hide || ! $allowed;
}
if ( $hide ) {
$removed[] = (int) $item->ID;
unset( $items[ $key ] );
}
}
return $items;
} );
Notes
Enable "CSS Classes" under Screen Options in Appearance > Menus, then add wpide-mepr-{membership ID}. Several classes mean "any of these".
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.