/** * Remove capabilities from an existing role * * Usage: wpcom_vip_remove_role_caps( 'author', array( 'publish_posts' ) ); * * @param string $role Role name * @param array $caps Capabilities to remove from the role */ function wpcom_vip_remove_role_caps($role, $caps) { $filtered_caps = array(); foreach ((array) $caps as $cap) { $filtered_caps[$cap] = false; } wpcom_vip_merge_role_caps($role, $filtered_caps); }
/** * Add new or change existing capabilities for a given role * * Usage: merge_role_caps( 'author', array( 'publish_posts' => false ) ); * * @param string $role Role name * @param array $caps Key/value array of capabilities for this role */ function merge_role_caps($role, $caps) { if (function_exists('wpcom_vip_merge_role_caps')) { wpcom_vip_merge_role_caps($role, $caps); } else { global $wp_user_roles; $role_obj = get_role($role); if (!$role_obj) { return; } $current_caps = (array) get_role_caps($role); $new_caps = array_merge($current_caps, (array) $caps); foreach ($new_caps as $cap => $role_can) { if ($role_can) { $role_obj->add_cap($cap); } else { $role_obj->remove_cap($cap); } } if (isset($wp_user_roles[$role])) { $wp_user_roles[$role]['capabilities'] = array_merge($current_caps, (array) $caps); } } }