Title: Sample Custom Role Code Shown in Readme
Last modified: August 21, 2016

---

# Sample Custom Role Code Shown in Readme

 *  Resolved [CodeWaggle](https://wordpress.org/support/users/codewaggle/)
 * (@codewaggle)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/)
 * HI Kathy,
 * Awesome plugin (Helga must be proud)!
 * I used your sample code to add some custom roles and found that the roles appeared
   in the “Access Role” section of each menu item, but the menu items were appearing
   when they shouldn’t.
 * It turned out that the key is being stored in the postmeta table rather than 
   the value.
    `_nav_menu_role a:1:{i:0;s:1:"0";}`
 * Instead of:
    `_nav_menu_role a:1:{i:0;s:8:"new-role";}`
 * Just want to let you know so that you can update the readme to show that you 
   need to enter a key value in the roles filter function and then check against
   that key value in the visibility filter function.
 *     ```
       function kia_new_roles( $roles ){
       	$roles['new-role-key'] = 'new-role';
       	return $roles;
       }
       add_filter( 'nav_menu_roles', 'kia_new_roles' );
       ```
   
 *     ```
       function kia_item_visibility( $visible, $item ){
       	if( isset( $item->roles ) && is_array( $item->roles ) && in_array( 'new-role-key', $item->roles ) ){
       	/*	if ( // your own custom check on the current user versus 'new-role' status ){
       				$visible = true;
       			} else {
       				$visible = false;
       		}
       	*/	}
       	return $visible;
       }
       add_filter( 'nav_menu_roles_item_visibility', 'kia_item_visibility', 10, 2 );
       ```
   
 * Thanks for sharing, it has saved me a bunch of time.
 * Be Well,
    Joe
 * [https://wordpress.org/plugins/nav-menu-roles/](https://wordpress.org/plugins/nav-menu-roles/)

Viewing 9 replies - 1 through 9 (of 9 total)

 *  Plugin Author [HelgaTheViking](https://wordpress.org/support/users/helgatheviking/)
 * (@helgatheviking)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732032)
 * Hi Joe,
 * Thanks for the kind words and the awesome review. Good catch! Someone asked me
   to add this bit, but I never really had the need to test it too much myself. 
   I will update my docs.
 * Cheers,
    -kathy
 *  Thread Starter [CodeWaggle](https://wordpress.org/support/users/codewaggle/)
 * (@codewaggle)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732060)
 * Glad to help,
    Joe
 *  [Dave Navarro, Jr.](https://wordpress.org/support/users/dnavarrojr/)
 * (@dnavarrojr)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732139)
 * I use a Role Editor plugin to create custom roles and capabilities.
 * I’m guessing from this thread, that your plugin does not automatically detect
   those, so I need to read your README file…?
 *  [Dave Navarro, Jr.](https://wordpress.org/support/users/dnavarrojr/)
 * (@dnavarrojr)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732140)
 * Ahh, okay it’s working (forgot to publish the new role in multisite). What it
   doesn’t support is capabilities.
 *  Thread Starter [CodeWaggle](https://wordpress.org/support/users/codewaggle/)
 * (@codewaggle)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732142)
 * You can use it for anything you want, including capabilities.
 * Here’s what I’m doing:
    I make up names that I want to appear in the “Access 
   Role” section of the menu item:
 *     ```
       function cwaga_new_roles( $roles ){
       	$roles['member'] = 'Member';
       	$roles['registered'] = 'Registered';
       	return $roles;
       }
       add_filter( 'nav_menu_roles', 'cwaga_new_roles' );
       ```
   
 * Then I write code that tells it what to do if my custom “role” is checked for
   that menu item. So you can write code that pulls the capabilities for the current
   user from the user_meta table and check if they have the capability that you 
   want them to have. In my case I’m checking the users membership level, so my 
   code gets their level and compares it based on my criteria.
 *     ```
       function cwaga_item_visibility( $visible, $item ){
         global $pmpro_ready;
         if( is_user_logged_in() && isset($pmpro_ready) ){
           if( isset( $item->roles ) && is_array( $item->roles ) && in_array( 'member', $item->roles ) ){
             global $current_user;
             $user_id = $current_user->ID;
             $cwjds_member_level_info = pmpro_getMembershipLevelForUser($user_id);
   
             if ( $cwjds_member_level_info->ID > 1 ){
               $visible = true;
             } else {
               $visible = false;
             }
           } elseif( isset( $item->roles ) && is_array( $item->roles ) && in_array( 'registered', $item->roles ) ){
             global $current_user;
             $user_id = $current_user->ID;
             $cwjds_member_level_info = pmpro_getMembershipLevelForUser($user_id);
   
             if ( isset($cwjds_member_level_info) && $cwjds_member_level_info->ID == 1 ){
               $visible = true;
             } else {
               $visible = false;
             }
           }
         }
       	return $visible;
       }
       add_filter( 'nav_menu_roles_item_visibility', 'cwaga_item_visibility', 10, 2 );
       ```
   
 *  Plugin Author [HelgaTheViking](https://wordpress.org/support/users/helgatheviking/)
 * (@helgatheviking)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732148)
 * Joe, you’re an all-star!
 *  Thread Starter [CodeWaggle](https://wordpress.org/support/users/codewaggle/)
 * (@codewaggle)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732155)
 * I was hoping that Dave would check back and see it, I just missed him by 10 minutes.
 * Hopefully someone else will find it helpful in the future.
 * Next time you do an update you could change the description to note that it’s
   very flexible.
 * This plugin lets you hide custom menu items based on user roles. So if you have
   a link in the menu that you only want to show to logged in users, certain types
   of users, or even only to logged out users, this plugin is for you.
 * In addition to user roles, you can customize the functionality by adding check
   boxes with custom labels using the “`nav_menu_roles`” filter and then use the“`
   nav_menu_roles_item_visibility`” filter to check against whatever criteria you
   need. You can check against any user meta values (like capabilities) and any 
   custom attributes added by other plugins.
 *  Plugin Author [HelgaTheViking](https://wordpress.org/support/users/helgatheviking/)
 * (@helgatheviking)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732156)
 * Yeah I probably should change some of the wording, so I hope you don’t mind if
   I lift a little from your post. Dave and I figured out in the other thread:
 * [http://wordpress.org/support/topic/feature-request-support-for-capabilities#post-5413340](http://wordpress.org/support/topic/feature-request-support-for-capabilities#post-5413340)
 * that you don’t even have to filter `nav_menu_roles_item_visibility` if you are
   adding a capability via the `nav_menu_roles` filter, since my code checks `current_user_can(
   $role)` to determine visibility. So, capabilities can be added with about 4 lines
   of code. More complex, or non-traditional roles would still need something like
   the block of code you posted earlier.
 *  Thread Starter [CodeWaggle](https://wordpress.org/support/users/codewaggle/)
 * (@codewaggle)
 * [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732157)
 * Hey that’s great, it’s even easier to customize than what I wrote!
 * Feel free to use anything I’ve posted, just makes the effort all the more worthwhile.
 * Joe

Viewing 9 replies - 1 through 9 (of 9 total)

The topic ‘Sample Custom Role Code Shown in Readme’ is closed to new replies.

 * ![](https://ps.w.org/nav-menu-roles/assets/icon-256x256.png?rev=2336319)
 * [Nav Menu Roles](https://wordpress.org/plugins/nav-menu-roles/)
 * [Frequently Asked Questions](https://wordpress.org/plugins/nav-menu-roles/#faq)
 * [Support Threads](https://wordpress.org/support/plugin/nav-menu-roles/)
 * [Active Topics](https://wordpress.org/support/plugin/nav-menu-roles/active/)
 * [Unresolved Topics](https://wordpress.org/support/plugin/nav-menu-roles/unresolved/)
 * [Reviews](https://wordpress.org/support/plugin/nav-menu-roles/reviews/)

 * 9 replies
 * 3 participants
 * Last reply from: [CodeWaggle](https://wordpress.org/support/users/codewaggle/)
 * Last activity: [12 years, 3 months ago](https://wordpress.org/support/topic/sample-custom-role-code-shown-in-readme/#post-4732157)
 * Status: resolved