devgeniem / wp-geniem-roles
WordPress角色创建和操作的包装类。
Requires
- php: >=7.0
- composer/installers: >=v1.0.12
- dev-master
- 1.6.1
- 1.6.0
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.3
- 1.0.2
- 1.0.1
- v1.0.0.x-dev
- 1.0.0
- 0.4.0
- 0.2.4.x-dev
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- 0.0.9
- 0.0.8
- 0.0.7
- 0.0.6
- 0.0.5
- dev-remove-default-false-caps
- dev-grant-post-edit
- dev-fix-doc-param-type
- dev-remove-reset-roles-on-admin-page
- dev-remove-admin-bar-nodes
- dev-addcaps-hotfix
- dev-global-menu-check
- dev-restrict-role-templates
- dev-restrict-post-edit-array-caps
- dev-hotfix-restrict-add-user
- dev-reset-roles-ms
- dev-issue-fixies-01252019
- dev-user-management-documentation
- dev-restrict-user-level-management
- dev-remove-submenupages
- dev-menu-slugs
- dev-restrict-by-slug
This package is auto-updated.
Last update: 2024-09-21 08:04:01 UTC
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_user
或promote_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
的角色的用户是可见的。
屏幕截图
管理员页面菜单别名
wp-geniem-roles
创建一个列出所有菜单slugs的管理员页面。这是使用函数remove_menu_pages()
的辅助页面。请参阅函数文档以获取更多信息。