arraypress / wp-roles-utils
A lean WordPress library for working with roles and capabilities
dev-main
2025-07-01 21:02 UTC
Requires
- php: >=7.4
This package is auto-updated.
Last update: 2025-09-02 14:42:17 UTC
README
A lightweight WordPress library for working with roles and capabilities. Provides clean APIs for role operations, capability management, and user-role assignments.
Features
- 🎯 Clean API: WordPress-style snake_case methods with consistent interfaces
- 🔐 Role Management: Create, check, and manage WordPress roles
- 💪 Capability Control: Add, remove, and check role capabilities
- 👥 User Assignment: Assign and manage user roles
- 📋 Form-Ready Options: Perfect value/label arrays for selects and forms
- 🔍 Search Functionality: Built-in role search with flexible options
Requirements
- PHP 7.4 or later
- WordPress 5.0 or later
Installation
composer require arraypress/wp-roles-utils
Basic Usage
Working with Single Roles
use ArrayPress\RolesUtils\Role; // Get role object $role = Role::get( 'editor' ); // Check if role exists if ( Role::exists( 'custom_role' ) ) { // Role exists } // Get role display name $name = Role::get_display_name( 'editor' ); // "Editor" // Role capabilities $capabilities = Role::get_capabilities( 'editor' ); $primitive_caps = Role::get_primitive_capabilities( 'editor' ); // Check if role has capability if ( Role::has_capability( 'editor', 'edit_posts' ) ) { // Role has capability } // Add/remove capabilities Role::add_capability( 'editor', 'custom_capability' ); Role::remove_capability( 'editor', 'custom_capability' ); // User-role assignments Role::set_for_user( 'editor', 123 ); // Replace all roles Role::add_to_user( 'author', 123 ); // Add additional role Role::remove_from_user( 'contributor', 123 ); // Check user roles if ( Role::user_has( 'editor', 123 ) ) { // User has editor role } $user_roles = Role::get_for_user( 123 ); // Multiple role checks if ( Role::user_has_any( [ 'editor', 'administrator' ], 123 ) ) { // User has at least one role } if ( Role::user_has_all( [ 'editor', 'custom_role' ], 123 ) ) { // User has all specified roles }
Working with Multiple Roles
use ArrayPress\RolesUtils\Roles; // Get all roles $role_names = Roles::get_names(); // ['editor' => 'Editor', ...] $role_slugs = Roles::get_slugs(); // ['administrator', 'editor', ...] $all_roles = Roles::get(); // Full role data with capabilities // Check which roles exist $existing = Roles::exists( [ 'editor', 'custom_role', 'invalid' ] ); // Capability operations $all_capabilities = Roles::get_all_capabilities(); $roles_with_cap = Roles::get_with_capability( 'edit_posts' ); $common_caps = Roles::get_common_capabilities( [ 'editor', 'author' ] ); // User operations $editor_users = Roles::get_users_with_roles( 'editor' ); $multi_role_users = Roles::get_users_with_roles( [ 'editor', 'author' ] ); $user_count = Roles::count_users( 'administrator' ); // Get role options for forms (simple format by default) $options = Roles::get_options(); // Returns: ['administrator' => 'Administrator', 'editor' => 'Editor', ...] // Get options in value/label format $options = Roles::get_options( [ 'format' => 'value_label' ] ); // Returns: [['value' => 'editor', 'label' => 'Editor'], ...] // Include guest option $options_with_guest = Roles::get_options( [ 'include_guest' => true ] ); // Returns: ['guest' => 'Guest', 'administrator' => 'Administrator', ...] // Include guest with value/label format $options_with_guest = Roles::get_options( [ 'include_guest' => true, 'format' => 'value_label' ] ); // Returns: [['value' => 'guest', 'label' => 'Guest'], ['value' => 'editor', 'label' => 'Editor'], ...] // Custom guest label $options = Roles::get_options( [ 'include_guest' => true, 'guest_label' => 'Visitor' ] ); // Search functionality $search_results = Roles::search( 'edit' ); $search_options = Roles::search_options( 'admin' ); // Editable roles (respects current user permissions) $editable_roles = Roles::get_editable(); $is_editable = Roles::is_editable( 'editor' ); // Sanitize role input $clean_roles = Roles::sanitize( [ 'editor', 'invalid', 'author' ] );
Role & Capability Management
// Check role capabilities $editor_caps = Role::get_capabilities( 'editor' ); $primitive_only = Role::get_primitive_capabilities( 'editor' ); // Modify role capabilities Role::add_capability( 'editor', 'manage_widgets' ); Role::remove_capability( 'editor', 'edit_themes' ); // Find roles with specific capability $roles_with_publish = Roles::get_with_capability( 'publish_posts' ); // Get all unique capabilities across roles $all_caps = Roles::get_capabilities();
User Role Management
// Single user operations Role::set_for_user( 'editor', 123 ); // Set single role (removes others) Role::add_to_user( 'author', 123 ); // Add additional role Role::remove_from_user( 'contributor', 123 ); // Check user roles $has_role = Role::user_has( 'editor', 123 ); $user_roles = Role::get_for_user( 123 ); // Multiple role checks $has_any = Role::user_has_any( [ 'editor', 'admin' ], 123 ); $has_all = Role::user_has_all( [ 'editor', 'custom' ], 123 ); // Get users by roles $editors = Roles::get_users_with_roles( 'editor' ); $staff = Roles::get_users_with_roles( [ 'editor', 'administrator' ] );
Search & Options
// Search roles $results = Roles::search( 'edit' ); // Roles containing "edit" $options = Roles::search_options( 'admin' ); // Form options (simple format by default) $select_options = Roles::get_options(); // Returns: ['administrator' => 'Administrator', 'editor' => 'Editor', ...] // Value/label format for structured arrays $structured_options = Roles::get_options( [ 'format' => 'value_label' ] ); // Returns: [['value' => 'editor', 'label' => 'Editor'], ...] // With guest option $with_guest = Roles::get_options( [ 'include_guest' => true ] ); // Returns: ['guest' => 'Guest', 'administrator' => 'Administrator', ...]
Key Features
- Value/Label Format: Perfect for forms and selects
- Search Functionality: Built-in role search
- Capability Management: Add, remove, and check capabilities
- User Assignment: Flexible user-role management
- Permission Aware: Respects current user's role editing permissions
Requirements
- PHP 7.4+
- WordPress 5.0+
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the GPL-2.0-or-later License.