wordpress
对WordPress角色和权限的理解
什么是角色和权限?和其他 CMS 或者 Web 程序一样,WordPress 也有一个内置的系统来验证一个特定的用户是否有足够的权限来进行某种动作。WordPress 这个内置的系统就是角色和权限系统,它首先将用户分为角色(Role),然后给每个角色都分配一定的权限。
下面是 WordPress 默认的用户角色:管理员 – 拥有所有的管理权限
编辑 – 发表文章,编辑文章,以及编辑其他人的文章,等等。
作者 – 发布和编辑自己的文章
投稿者 – 撰写和编辑自己的文章,但不能发布
订阅者 – 查看评论/添加评论/查看文章,等等。
WordPress 的角色和权限系统比用户等级的方法灵活得多,它支持对现有用户角色添加,删除和重新分配权限,甚至还可以添加更多的用户角色,并且不破坏系统原有内置的用户角色。
我们在写WordPress插件时,往往会在后台添加一个管理页面,让用户自定义插件选项,一般我们可以通过下面的函数实现:
// 添加主菜单
add_menu_page(page_title, menu_title, capability, handle, [function], [icon_url]);
// 添加子菜单
add_submenu_page(parent, page_title, menu_title, capability, file/handle, [function]);
//添加选项菜单子菜单
add_options_page(page_title, menu_title, capability, handle, [function]);
//添加工具菜单子菜单
add_management_page(page_title, menu_title, capability, handle, [function]);
//添加页面菜单子菜单
add_pages_page( page_title, menu_title, capability, handle, [function]);
//添加文章菜单子菜单
add_posts_page( page_title, menu_title, capability, handle, [function]);
//添加主题菜单子菜单
add_theme_page( page_title, menu_title, capability, handle, [function]);
我们很容易发现,这些函数都会有个参数:capability,这个参数就是用来指定用户看到该菜单所需要的权限。一般它的值是一个代表某种权限的字符串,比如:edit_posts。所以使用这些函数在 WordPress 后台中添加的菜单以及与这些菜单相关联的页面,是只有拥有指定的权限的用户才可以看到和访问的。
如果你的主题或者插件有设置页面,应该正确地控制哪些用户有权限可以访问这些页面,比如,添加的是一个主题选项页面,就应该使用 edit_themes 权限,而添加的是一个插件选项页面的话,使用的应该是 edit_plugins 权限,当然也可以直接 manage_options 权限来控制访问插件和主题选项页面。
许多插件仍然使用用户等级系统(用从0到10的数字代表用户的权限),但是 WordPress 已经废弃了等级系统,不应该再被使用。所以使用权限系统,就不必去担心 WordPress 不再支持用户等级系统,并且如果想添加和使用自定义的权限,也只能使用权限系统。
检查用户的权限如果使用的插件或主题允许用户更改博客的数据(添加新的内容或编辑现有的内容等),那么我们就要检测当前用户是否有足够的权限来执行这些动作,这个时候我们可以使用 current_user_can() 这个函数:
if ( current_user_can( $capability ) ) {
//如果用户拥有 $capability 的权限时执行的动作。
}
此函数也可以接受一个可选的参数:postID,用来检查当前用户是否有权限对特定文章进行某种操作:
// 检测用户对 ID 为 $post_ID 的日志是否有编辑的权限
current_user_can( ‘edit_post’, $post_id );
还有另外一个函数:author_can(),可以用来检查某个文章的作者是否具有一定的权限:
if ( author_can( $post, $capability ) ) {
// 如果文章 $post 的作者拥有 $capability 时执行的动作
}
函数 author_can 第一个参数可以是一个 $post 对象,或一个 Post ID。
有时需要为插件添加新的用户角色,比方说,我们要编写一个新的相册插件,用户可以注册并上传照片到网站,但是我们不希望这些注册用户可以添加或修改网站上任何其他类型的内容(如文章或页面)。为了做到这一点,最好的办法就是添加一个新的自定义用户角色:
添加自定义用户角色用到的函数是:add_role(),它会添加含有一组权限的一个新的用户角色,这里我添加一个叫做 ‘photo_uploader’ 的用户角色,它显示的名字是:’Photo Uploader’,它默认的权限是:’organize_gallery’:
add_role( ‘photo_uploader’, ‘Photo Uploader’, array( ‘organize_gallery’ ) );
创建好用户角色之后,当一个用户创建,编辑或上传相册的时候,我们就可以使用 current_user_can( ‘organize_gallery’ ) 来检查当前用户是否有权限了。
并且被赋予了这个角色的用户只可以 organize_gallery ,但不能 edit_posts 或 publish_posts,所以我们无需担心他会修改网站其他内容了。
要删除一个角色,使用 remove_role() 函数,比如当用户决定卸载插件时,就应该有一个选项让插件的用户可以删除这些自定义角色:
remove_role( ‘photo_uploader’ );
添加自定义用户权限
如果我们想为现有用户添加权限该怎么办呢?继续我们的相册插件的例子,我们想让作者也有上传图片的权限,我们可以使用 add_cap() 函数:
//获取 “author” 的角色对象
$role = get_role( ‘author’ );
//为角色对象添加 “organize_gallery” 权限
$role->add_cap( ‘organize_gallery’ );
我们已经讨论过了检查和添加权限,以及添加角色,这是管理 WordPress 用户权限最常用的函数。然而,正如这篇文章的标题包含“终极”二字一样,我们会介绍WordPress 用于角色和权限幕后工作的三个类,以及这些类提供的接口,我们可以在插件中进行高级权限管理。这三个类是:
WP_Roles
WP_Role
WP_User
这三个类的源代码可以在 wp-includes/capabilities.php 中找到,源代码注释写得很详细,下面总结一下怎样使用这些类:
WP_Roles 类
WP_Roles 是一般的角色管理类,当我们在插件中使用的时候,可以不用实例化一个新的对象,而是直接使用 WordPress 默认创建的一个全局对象 $wp_roles,可以在任何地方使用它,只要事先声明 global 即可:
global $wp_roles;
我们上面使用的函数 add_role() 和 remove_role() 实际上是 $wp_roles->add_role() 和 $wp_roles->remove_role() 的别名。因此,我们也可以直接使用 $wp_roles 对象添加和删除角色,例如:
global $wp_roles;
//添加新角色,和add_role()功能一样
$wp_roles->add_role( $role, $display_name, $capabilities )
//删除角色, 和remove_role()功能一样
$wp_roles->;remove_role( $role );
同样也可以使用这种方法得到一个角色:
global $wp_roles;
//通过角色名称得到一个角色,和get_role()功能一样
$wp_roles->get_role( $role );
还可以得到一个可用角色列表,含有角色的名称和角色的显示名称。这个对想为用户提供一个接口,改变权限分配时候非常有用的。
global $wp_roles;
//得到一个值列表包括 $role_name => $display_name
$roles = $wp_roles->get_names();
最后可以使用 $wp_roles 添加和删除权限,此对象几乎包括所有的角色和权限操作。
global $wp_roles;
//为角色$role添加权限$cap
$wp_roles->add_cap( $role, $cap );
//为角色$role删除权限$cap
$wp_roles->remove_cap( $role, $cap );
//例子
$wp_roles->add_cap( ‘administrator’, ‘manage_galleries’ );
$wp_roles->remove_cap( ‘subscriber’, ‘view_galleries’ );
WP_Role 类
这是一个非常简单的类,它的功能就是添加和删除权限。
//得到角色对象
$role_object = get_role( $role_name );
//为角色对象添加权限$cap
$role_object->add_cap( $capability_name );
//为角色对象删除权限$cap
$role_object->remove_cap( $capability_name );
WP_User类
这个类可以管理每个用户的角色和权限,这意味着可以为一个特定具体的用户分配多个角色,或者为当前用户添加特定的权限,不论他目前是什么角色。
首先需要获取用户对象来操纵它的角色和权限:
//通过用户ID得到用户对象
$user = new WP_User( $id );
//或者通过用户名
$user = new WP_User( null, $name );
我们可以通过用户ID或用户名得到一个用户对象。对于第二种方法,第一个参数必须是空的(null或空字符串),如:
//通过ID得到管理员对象
$admin = new WP_User( 1 );
//通过用户名得到管理员对象
$admin = new WP_User( null, ‘admin’ );
一旦得到了用户对象,就可以为这个用户的添加另一个角色,而无需修改他目前的角色,这意味着用户可以有多个角色:
$user->add_role( $role_name );
也可以使用 remove_role(),来为该用户删除某个角色:
$user->remove_role( $role_name );
还可以为该用户设置一个角色,这意味着该用户将被删除当前所有的角色,并分配一个新的角色:
$user->set_role( $role_name );
对于权限操作,也有很多的方法来做各种事情:
//检查该用户是否具有某种权限或角色名称
if ( $user->has_cap( $cap_name ) ) {
//做一些事
}
//为用户添加权限
$user->add_cap( $cap_name );
//为用户删除权限
$user->remove_cap( $cap_name );
//删除用户所有权限
$user->remove_all_caps();
以上就是所有有关 WordPress 角色和权限的知识,WordPress 强大的用户角色和权限管理系统可以让我们随时创建复杂的项目。
Wordpress建站服务中的坑:不给管理员权限
作者:悦然wordpress建站(悦然建站)
(此处已添加小程序,请到今日头条客户端查看)悦然wordpress建站这段时间接到过一些用户的咨询,同时也从一些用户那里了解到了目前wordpress建站服务中的坑,所以准备写几篇文章给大家分享一下,同时也给大家提个醒,希望大家能够避开这些坑。
最近悦然wordpress接到了一个wordpress外贸建站项目,需要把用户原来的英文网站搬到国内,同时制作制作中文网站并备案。这种项目原来是比较简单的,但是我在搬运网站内容时却遇到了难题。因为这个原来给客户建站的服务商只提供了最简单的编辑权限,并没有给管理员权限,这样的很多操作都没办法进行,所以最近客户一直在给原来的建站公司沟通,但目前来看似乎并不顺利。
一般情况下我们选择wordpress建站的主要原因就是它开源免费,并且可以掌握完整的网站源码权限,而这个建站公司的做法直接抹杀了wordpress建站的最主要优势,确实有点坑!客户花了钱做网站,却得不到完整的源码和管理权限,这也不太应该!
好在悦然wordpress建站已经给客户准备好了预备方案,因为在最开始我就已经预想到的这类情况可能会发生,不过客户还想再于原来的建站公司再沟通试试。
以后大家在选择wordpress建站服务时一定要尽量避免这个坑,网站的域名、源码、管理权限一定要全部归属自己的,否则这样的wordpress建站服务不要也罢。
WP菜鸟建站27:wordpress后台用户菜单怎样操作?
在众多的wordpress程序开发的网站中,大多数都只有一个用户,那就是wordpress站长他自己。为什么呢?因为大多数wordpress站长建站的目的不是像微信、微博那样的,需要许许多多的用户来捧场,而是为了自己的爱好和职业相关,把自己的wordpress网站当成一个博客或日记,定期在它上面发表自己的观点和学习记录等等东西。所以,对于他们来说,也就不用去理会wordpress后台左侧的用户菜单的使用和管理。
但是,如果你想让自己的wordpress网站能像新浪博客、CDSN博客那样的活跃,让其他的用户也能在你的网站上自由发表文章,那么,你就要开放wordpress网站的用户注册权限,以及定义注册用户为作者以上身份。当然,如何开放注册不是本文的重点。本文是要介绍“wordpress网站后台的用户菜单怎样使用”。
我们进入到wordpress网站的后台,点击左侧的“用户”菜单,我们可以看到3个的菜单:所有用户、添加用户、我的个人资料。下面,我就来一个一个地解说一下。
一:所有用户。
如果我们wordpress网站开放了站外用户注册权限,注会有多多少少的站外用户可能到我们的网站注册,然后进站发表他们的文章。这时,这些注册过的用户,会在这里展示。我们点击这个“所有用户”的菜单,就可以在右侧内容栏中看到所有的注册用户,如下图:
作为wordpress站长的我们,可以在这里对这些注册用户进行管理:查看、编辑或删除(如上图)。我们点击删除,就可以把这个注册用户从我们的网站中踢出去;我们点击“编辑”,就可以对这个注册用户的相关信息资料进行修改,如下图:
如何修改这些用户的信息资料,这个跟我们前面的文章“WP菜鸟建站11:怎样修改wordpress用户信息?”里面介绍的是一样,这里就不再做介绍了。
注意:这里的删除动作一定要小心使用哦,不要把自己的wordpress网站的重要用户给删除了哟。
二:添加用户。
这也是wordpress提供给站长的一个功能。这个功能对于一个wordpress网站的团队来说,还是非常有必要的。一个wordpress网站想做大,通过一个团队来操作,可行性就更强。这时,我们的wordpress网站可以不必要开放站外用户注册功能,而可以直接通过这个“添加用户”功能来把这个团队的所有成员添加进去。
我们点击“添加用户”子菜单,右侧内容栏就会显示出“添加用户”的表单(如下图)。
?在这个“添加用户”表单中,用户名、电子邮件、密码、角色是必须填写或选择的。最好是填写团队成员的常用的邮箱地址。角色一定要选择“作者”以上权限,如果对成员完全信任,可以选择“编辑或管理员”。管理员的权力是最高的,可以对整个wordpress后台的所有东西做出处理,这个要小心设置了。
查看自己添加用户有没有成功,可以到“所有用户”列表中去看看。用户列表一般是按添加时间的倒序来排列的,所以,最后添加的用户会在用户列表的第一页的最上面一行显示。
三:我的个人资料。
我的个人资料,指的是当前登录用户的个人资料。点击“我的个人资料”,就会在右侧内容栏中显示当前登录用户的人个信息,用户可以对它进行修改。这个在前面的文章“WP菜鸟建站11:怎样修改wordpress用户信息?”里已经介绍过了,这里就不说了。
通过上面的介绍,我们对wordpress网站后台左侧导航的用户菜单功能做了一次详细介绍。如果你也开放了站外用户注册,那么,这个用户菜单的操作还是要熟悉一下的。对那些在我们的wordpress网站上乱发表垃圾文章的垃圾注册用户,我们要果断地、毫不留情地对他们进行剔除。同样,我们也要对那些发表优质文章的注册用户给予相应的奖励。如了,本文就写到这了,如果疑问,欢迎点评或私信我。