devgeniem/wp-geniem-roles

WordPress角色创建和操作的包装类。

安装次数: 40,364

依赖: 0

建议者: 0

安全: 0

星级: 17

关注者: 33

分支: 1

开放问题: 3

类型:wordpress-plugin


README

为开发者提供创建和操作WordPress角色的包装类。

目录

安装

Composer安装

命令行

composer require devgeniem/wp-geniem-roles

composer.json

...
"require": {
    "devgeniem/wp-geniem-roles": "*",
    ...
}
...

手动安装

将插件移动到您的WordPress安装的plugins/文件夹。

开发指南

用户角色存储在数据库中,因此您需要更改角色后重置数据库中的角色。这可以通过wp-geniem-roles或wp cli完成。

使用wp-geniem-roles重置角色

wp-geniem-roles使用一种方法重置WordPress标准角色和自定义角色。请注意,这是一个耗时的过程,您不希望在每个页面加载时运行此操作。用于调试和受控重置角色的辅助函数。

\Geniem\Roles::reset_roles();

将角色重置为WordPress默认角色

wp-geniem-roles使用一种方法将所有角色重置为WordPress默认角色。

\Geniem\Roles::reset_to_default_roles();

使用WP CLI在多站点上重置角色

使用CLI命令在多站点上重置角色。这会重置所有默认和自定义角色。

wp eval "\Geniem\Roles::reset_roles();"

WP CLI重置角色。

您还可以使用WP CLI重置角色,请参阅此处文档。https://developer.wordpress.org/cli/commands/role/

示例/功能

初始化Geniem Roles

Geniem角色插件已经设计为单例架构。单例在插件内部创建。在插件激活后,您可以使用Geniem角色功能。仍然是一个好习惯,要检查插件是否已激活。

// If wp-geniem-roles is active.
if ( class_exists( '\Geniem\Roles' ) ) {
    // Run Geniem roles functions here.
}

创建一个具有权限的新角色

所有新角色权限默认为false。因此,我们只添加我们想要应用于角色的权限。请参阅示例代码以获取实际示例。

/**
 * Create a new role
 */

// Caps to be added to the new role
// all caps default to false see the details plugin.php \Geniem\Role::get_default_caps()
$new_role_caps = array(
    "activate_plugins"    => true,
    "delete_others_pages" => true,
    "delete_others_posts" => true,
);

// Create a new role "testrole" with wanted capabilities
$new_role = \Geniem\Roles::create( 'new_role', __( 'New role', 'theme-text-domain' ), $new_role_caps );

// Check if role throws a WordPress error
if ( is_wp_error( $new_role ) ) {
    error_log( $new_role->get_error_messages() );
}

获取并操作一个角色

您可以通过调用函数\Geniem\Roles::get( $role_slug );从WordPress中调用现有角色。您可以使用角色作为对象来操作角色。请参阅下面的示例。

// Gets a role instance of \Geniem\Roles
$admin = \Geniem\Roles::get( 'administrator' );

为角色添加权限

// Define desired capabilities for a role 'administrator'
$admin_caps = [
    'geniem_roles'
];

// add_caps takes an array off capabilities
$admin->add_caps( $admin_caps );

从角色中移除权限

// Define removable caps in an array
$admin_removable_caps = [
    'edit_users',
    'delete_users',
    'create_users'
];

// Run function remove_caps for desired wp role
$admin->remove_caps( $admin_removable_caps );

移除一个角色。

// Get a role.
$author = \Geniem\Roles::get( 'author' );

// If role is removed successfully this will cause an error on the next page load. 
if ( $author ) {
    // Remove a role
    $author->remove();
}

重命名一个角色。

// Rename a role
$author->rename( 'New name' );

从角色中移除菜单页面

您可以使用string值或多个页面的array值移除单个管理菜单页面。您还可以移除子菜单页面。请参阅下面的示例以获取详细信息。

/**
 * Define removable admin pages array
 *
 * note: Most of the plugins can be removed by plugin page slug.
 * Geniem roles lists all menu slugs in the admin page [Geniem Roles -> Menu slugs].
 *
 */
$admin_removable_admin_pages = [
    'edit.php',                             // Posts
    'edit.php?post_type=page',              // Pages
    'edit.php?post_type=acf-field-group',   // Advanced Custom Fields
    'plugin_page_slug',                     // Remove plugin page by plugin page slug
    // You can also remove submenu pages like so.
    'themes.php' => [
        'themes.php',
        // Note geniem roles has automated feature to remove 'customize.php' with ease.
        // No need for usually required query parameters.
        'customize.php',
    ],
];

// Remove multiple menu pages remove_role_menu_pages( $role_slug, $menu_pages )
$admin->remove_menu_pages( $admin_removable_admin_pages );

通过角色移除管理栏节点

您可以使用remove_admin_bar_nodes()函数通过角色移除管理栏节点。请参阅下面的示例以获取详细信息。

/**
 * Define removable admin bar nodes.
 */
$admin_removable_admin_bar_nodes = [
    'new-post', // Default post type 'post' add new button.
];

$admin->remove_admin_bar_nodes( $admin_removable_admin_bar_nodes );

限制帖子编辑和删除

此函数使限制某些帖子的编辑变得简单快捷。传递受限帖子作为帖子ID数组,并选择您想要限制的权限。

/**
* All possible restricted capabilities are listed below
* https://codex.wordpress.org/Function_Reference/map_meta_cap
*/
'delete_page'
'delete_post'
'delete_user'
'edit_comment' (3.1. Mapped to 'edit_post' meta capability.)
'edit_page'
'edit_post'
'edit_user'
'publish_post' (3.5)
'promote_user'
'read_post'
'read_page'
'remove_user'
// Define restricted post IDs
$frontpage_id = (int) get_option( 'page_on_front' );

$restricted_posts = [
    $frontpage_id,
    2
];

// Restricted capabilities for the post.
$capabilities = [
    'delete_post',
    'edit_post',
];

$admin->restrict_post_edit( $restricted_posts, $capabilities );

授权帖子编辑

此函数使通过给定的帖子ID和权限授予帖子变得简单快捷。注意,您还可以为其他帖子定义权限,如果没有定义,则所有权限都将阻止其他帖子。

/**
* All possible restricted capabilities are listed below
* https://codex.wordpress.org/Function_Reference/map_meta_cap
*/
'delete_page'
'delete_post'
'delete_user'
'edit_comment' (3.1. Mapped to 'edit_post' meta capability.)
'edit_page'
'edit_post'
'edit_user'
'publish_post' (3.5)
'promote_user'
'read_post'
'read_page'
'remove_user'
// Define restricted post IDs
$frontpage_id = (int) get_option( 'page_on_front' );

$granted_post_ids = [
    $frontpage_id,
    2
];

// Allow edit_post cap for granted posts.
$granted_posts_caps = [
    'edit_post',
];

// If empty all caps will be blocked.
// Here we are allowing delete_post cap for other posts than $granted_post_ids. (optional)
$restricted_posts_caps = [
    'delete_post',
];

// Post types to restrict. If defined other post types won't be handled. (optional)
$post_types = [ 'page' ];

$admin->grant_post_edit( $granted_post_ids, $granted_posts_caps, $restricted_posts_caps, $post_types );

按角色限制用户管理

限制用户通过给定的角色和能力来管理用户的功能。例如,如果角色具有edit_userpromote_user权限被限制,则该角色将从WordPress管理员用户管理下拉菜单中移除,例如批量操作“更改角色”。

/**
 * Associative array of removed caps by the role.
 * $key = User role to be restricted from the role.
 * $value = Array of removed caps from the role.
 * 
 * All possible user editing caps has been listed below:
 * 'edit_user'
 * 'delete_user'
 * 'promote_user'
 * 'remove_user'
 */
$custom_role_restricted_user_roles = [
    // Role
    'administrator' => [
        // Removed caps.
        'edit_user',
        'delete_user',
        'remove_user',
    ],
    // Another role
    'editor' => [
        'delete_user',
    ],
];

$custom_role->restrict_user_management_by_role( $custom_role_restricted_user_roles );

按角色限制用户模板管理

限制可用模板的角色。仅添加您想要启用的模板。将使用slug数组作为参数。(您可以从wp-admin模板下拉菜单中检查模板slug。)注意!:WordPress处理默认模板的方式与其他模板不同。默认模板始终对用户可用。如果您只想启用默认模板,请将字符串'默认'作为参数。

    // Example 1
    // Allow only default template for the user.
    $role->restrict_role_templates( 'default' );
    // Example 2 allow
    // page-frontpage.php and default template for the user.
    $allowed_templates = [
        'page-frontpage.php',
    ];

    $role->restrict_role_templates( $allowed_templates );

为单个用户授予超级管理员权限

\Geniem\Roles::grant_super_admin_cap( 1 );

过滤器

'geniem/roles/add_menu_page_cap'

更改wp-geniem-roles wp-admin菜单权限。

  • 默认值:'activate_plugins'
  • 参数类型:string

示例用法

/**
 * Filter wp-geniem-roles menu page capability.
 *
 * @return string WordPress capability.
 */
function filter_geniem_roles_menu_page_cap( $menu_page_cap ) {

    return 'manage_options';
}

\add_filter( 'geniem/roles/add_menu_page_cap', 'filter_geniem_roles_menu_page_cap' );

'geniem/roles/default_roles'

过滤新角色的默认权限。

  • 参数类型:array

示例用法

/**
 * Filter wp-geniem-roles default capabilities for the new role.
 *
 * @return array An array of capabilities to be added to the new role automatically.
 */
function filter_geniem_roles_default_caps( $default_caps ) {

    $default_caps = [
        'edit_posts' => true,
    ];

    return $default_caps;
}

\add_filter( 'geniem/roles/default_roles', 'filter_geniem_roles_default_caps' );

管理员页面角色列表

wp-geniem-roles在管理员侧创建一个页面,列出所有当前活动角色及其权限。管理员页面对于可以can_activate_plugins的角色的用户是可见的。

屏幕截图

Admin side screenshot

管理员页面菜单别名

wp-geniem-roles创建一个列出所有菜单slugs的管理员页面。这是使用函数remove_menu_pages()的辅助页面。请参阅函数文档以获取更多信息。

Wiki

技巧和窍门 https://github.com/devgeniem/wp-geniem-roles/wiki