开发 WordPress 网站时,我们避免不了要与 WordPress 用户数据打交道,特别是开发 WordPress 前端用户中心的时候,我们需要知道某个用户是否有权限执行某些操作,以便为用户提供足够的安全保证。有几个内置于 WordPress 中的辅助函数可以帮助我们轻松的判断用户的状态、权限等信息。我们把这些函数整理了一下,形成此文。
判断用户是否登录 is_user_logged_in
该函数的用法很简单,功能也很单纯,就是为了判断用户是否登录了网站,不需要参数,如果用户登录返回 true,如果没有登录 返回 false。
判断是否为超级管理员 is_super_admin
该函数可以接受一个用户 ID 作为参数,如果没有设置这个参数,这个参数的值默认为当前登录用户的用户 ID。
如果单站点模式中使用,该函数会判断用户是否为管理员。
如果被判断的用户是超级管理员或管理员,返回 true,不是则返回 false。
有一个与这个名称类似,作用不同的判断函数 is_admin 是用来判断是否为后台界面的,不要搞混了。
判断某用户可以做什么 user_can
该函数需要两个参数,第一个是用户 ID 或用户对象,第二个是权限名称或角色名称。如果用户拥有某个权限或角色,返回 true,没有则返回 false。
虽然该函数可以检查用户是否具有某个角色,但不建议使用,因为使用这个函数检查角色可能会产生不靠谱的结果。
判断当前用户可以做什么 current_user_can
这个函数可以说是上面函数的简写加强版,省掉了上面函数前面的用户 ID 参数,而多加了一个可选的 object_id 参数,用来检查指定对象的自定义权限,这个参数我们用得不多,如果需要请参数 current_user_can 官方文档。
判断当前用户在某个站点可以做什么 current_user_can_for_blog
这个函数是 current_user_can 函数的多站点定制版,在多站点中,检查用户是否具有某个站点的权限,不过省略了不常用的 object_id 参数。该函数也接受两个参数,第一个参数是博客 ID,第二个参数是权限或角色名称。
判断一篇文章的用户可以做什么 author_can
类似 user_can 函数,不同的是这个函数第第一个参数是文章 ID 或对象,而不是用户,为我们省略了一个获取文章用户的步骤。第二个参数依然是角色或权限名称。
WordPress 中用户判断函数的起源
看了上面这么多判断函数,有人会该忍不住吐槽了,WordPress 真是麻烦,判断个用户权限都需要记住这么多函数,其实,他们如果能够看一下这些函数的源码,就会发现,通过这些函数最终执行用户权限判断的代码其实只有一个:WP_User::has_cap,这些函数只是 WordPress 开发团队为了方便我们使用而建的快捷辅助函数而已。