wordpress custom role capabilities

Besides default capabilities in wordpress, we can set additional capabilities for our custom plugins or custom pages. Setting custom role capabilities in wordpress for custom plugin is as below: Add following line in your plugin file (suppose you have created a test plugin with folder name as "test_plugin" than put the following lines in "test_plugin.php" file:
function add_new_capability() {           
    $role = get_role('contributer');   //getting role object. it can be "subscriber" or "author"
    $role->add_cap( 'manage_appointment' );   // pushing new capabilities.
}

function addAppointments_menu() {    
    add_new_capability();
    if(current_user_can("manage_appointment")) {
    add_menu_page(
         'ManageAppointments', // The title to be displayed on the corresponding page for this menu
         'Appointments', // The text to be displayed for this actual menu item  
         'manage_appointment', 	// Which type of users can see this menu  
         'test-appointments-plugin', // The unique ID - that is, the slug - for this menu item  
         'manage_appointments', // The name of the function to call when rendering the menu for this page
         plugins_url('images/icon-cal.gif', __FILE__ ));   // Icon for the Main menu in Admin panel            	
    }
}
function manage_appointments() {
    //Your page content goes here
}
add_action( 'admin_menu', 'addAppointments_menu' );
Code is as per Wordpress version: 3.9.1
More information about different function used: 1) current_user_can() : Function checks whether the current user has a certain capability or not. 2) add_menu_page() : This function creates a new top level menu section in the admin menu sidebar. 3) add_action() : Function is used to add extra submenus and menu options to the admin panel's menu structure. 4) get_role() : Function get a role definition. It returns object. 5) add_submenu_page() :This function takes a capability which will be used to determine whether or not a page is included in the menu. [si-contact-form form='1']



Your feedbacks are most welcome..