$wp_roles = wp_roles(); foreach ( $user->caps as $cap => $has ) { if ( $has && ! $wp_roles->is_role( $cap ) ) { $user_caps[] = $cap; } } } return self::get_role_from_caps( array_merge( $role_caps, $user_caps ) ); } /** * Gets all canonical roles of at least the given canonical role capability. * * @example ::get_canonical_roles_of_at_least( 'editor' ) // [ 'administrator', 'editor' ] * * @param string $minimum * * @return string[] */ public static function get_canonical_roles_of_at_least( $minimum ) { $at_least = []; foreach ( self::$canonical as $role ) { $at_least[] = $role; if ( $role === $minimum ) { break; } } return $at_least; } /** * Get all users that have the given canonical role. * * @param string|string[] $canonical * @param array $additional_args * * @return WP_User[] */ public static function get_users_with_canonical_role( $canonical, $additional_args = array() ) { $canonical = (array) $canonical; $roles = array(); foreach ( wp_roles()->roles as $role => $_ ) { if ( in_array( self::get_canonical_role_from_role( $role ), $canonical, true ) ) { $roles[] = $role; } } if ( empty( $roles ) ) { return array(); } return get_users( array_merge( $additional_args, array( 'role__in' => $roles ) ) ); } /** * Get a list of all of the capabilities that are unique to each role. * * @return array */ public static function get_unique_capabilities() { return array( 'administrator' => array( 'activate_plugins', 'create_users', 'delete_plugins', 'delete_themes', 'delete_users', 'edit_dashboard', 'edit_files', 'edit_plugins', 'edit_theme_options', 'edit_themes', 'edit_users', 'export', 'import', 'install_plugins', 'install_themes', 'level_8', 'level_9', 'level_10', 'list_users', 'manage_options', 'promote_users', 'remove_users', 'switch_themes', 'unfiltered_upload', 'update_core', 'update_plugins', 'update_themes', ), 'editor' => array( 'delete_others_pages', 'delete_others_posts', 'delete_pages', 'delete_private_pages', 'delete_private_posts', 'delete_published_pages', 'edit_others_pages', 'edit_others_posts', 'edit_pages', 'edit_private_pages', 'edit_private_posts', 'edit_published_pages', 'level_3', 'level_4', 'level_5', 'level_6', 'level_7', 'manage_categories', 'manage_links', 'moderate_comments', 'publish_pages', 'read_private_pages', 'read_private_posts', 'unfiltered_html', ), 'author' => array( 'delete_published_posts', 'edit_published_posts', 'level_2', 'publish_posts', 'upload_files', ), 'contributor' => array( 'delete_posts', 'edit_posts', 'level_1', ), 'subscriber' => array( 'level_0', 'read', ), ); } /** * Get a list of all of the capabilities each default WordPress role has. * * @return array */ public static function get_capabilities() { return array( 'administrator' => array( 'activate_plugins', 'create_users', 'delete_others_pages', 'delete_others_posts', 'delete_pages', 'delete_plugins', 'delete_posts', 'delete_private_pages', 'delete_private_posts', 'delete_published_pages', 'delete_published_posts', 'delete_themes', 'delete_users', 'edit_dashboard', 'edit_files', 'edit_others_pages', 'edit_others_posts', 'edit_pages', 'edit_plugins', 'edit_posts', 'edit_private_pages', 'edit_private_posts', 'edit_published_pages', 'edit_published_posts', 'edit_theme_options', 'edit_themes', 'edit_users', 'export', 'import', 'install_plugins', 'install_themes', 'level_0', 'level_1', 'level_2', 'level_3', 'level_4', 'level_5', 'level_6', 'level_7', 'level_8', 'level_9', 'level_10', 'list_users', 'manage_categories', 'manage_links', 'manage_options', 'moderate_comments', 'promote_users', 'publish_pages', 'publish_posts', 'read', 'read_private_pages', 'read_private_posts', 'remove_users', 'switch_themes', 'unfiltered_html', 'unfiltered_upload', 'update_core', 'update_plugins', 'update_themes', 'upload_files', ), 'editor' => array( 'delete_others_pages', 'delete_others_posts', 'delete_pages', 'delete_posts', 'delete_private_pages', 'delete_private_posts', 'delete_published_pages', 'delete_published_posts', 'edit_others_pages', 'edit_others_posts', 'edit_pages', 'edit_posts', 'edit_private_pages', 'edit_private_posts', 'edit_published_pages', 'edit_published_posts', 'level_0', 'level_1', 'level_2', 'level_3', 'level_4', 'level_5', 'level_6', 'level_7', 'manage_categories', 'manage_links', 'moderate_comments', 'publish_pages', 'publish_posts', 'read', 'read_private_pages', 'read_private_posts', 'unfiltered_html', 'upload_files', ), 'author' => array( 'delete_posts', 'delete_published_posts', 'edit_posts', 'edit_published_posts', 'level_0', 'level_1', 'level_2', 'publish_posts', 'read', 'upload_files', ), 'contributor' => array( 'delete_posts', 'edit_posts', 'level_0', 'level_1', 'read', ), 'subscriber' => array( 'level_0', 'read', ), ); } }