解决已弃用调用函数 has_cap 时使用的参数问题

nZone 2023年6月29日更新于1 年前 共1430字 5行代码 预计6分钟 评论 141

这个问题一直困扰着我,我主要是因为博客用的主题是老旧的版本。WordPress程序一直在升级,而老旧的主题却没有更新维护,这样容易出现各种各样的问题,我们打开WordPress调试模式,就会提示:Deprecated: 自 2.0.0! 版本起,已弃用调用函数 has_cap 时使用的参数! 用户级别已被废弃,请改用能力。 in www.nzonex.com\wp-includes\functions.php on line 5697.

已弃用调用函数has_cap错误

一、用户级别(User Level)的废弃

这个错误提示表明,使用了已弃用的参数调用了has_cap()函数。您可以尝试找到使用has_cap()函数的地方,并将其参数更新为正确的能力(capability)名称。然而,当你搜索has_cap()函数,根本找不到这个。借问酒家何处有,牧童遥指杏花村,如今却指错方向。

这个问题涉及到过时的用户级别控制。在旧版本的 WordPress 中,使用数字来表示用户级别(例如level_10和level_0)。用户级别从 0 到 10,分别代表不同的权限等级。例如,级别 10 表示管理员,级别 0 表示访客。

默认情况下,WordPress有以下用户角色和等级的对应关系:

  1. 管理员(Administrator):角色等级为10,具有对整个WordPress站点的完全访问和管理权限,包括用户管理、插件和主题管理、设置更改等。
  2. 编辑(Editor):角色等级为7,可以编辑和发布所有内容,包括其他用户的文章和页面。可以管理和审查评论。
  3. 作者(Author):角色等级为2,可以创建、编辑和发布自己的文章。无法管理其他用户的内容或评论。
  4. 贡献者(Contributor):角色等级为1,可以编写和编辑自己的文章,但无法发布。需要编辑或管理员审查并发布其文章。
  5. 订阅者(Subscriber):角色等级为0,主要是为了让用户能够注册和订阅网站的内容,没有其他编辑或发布权限。

然而,随着 WordPress 的发展和功能扩展,用户级别系统变得过于简单和不够灵活。因此,从 WordPress 2.0.0 版本开始,用户级别逐渐被废弃。

二、引入用户能力(User Capability)

用户级别系统,也就是用户的角色和等级,可以通过插件或自定义代码进行修改和扩展。不同的主题和插件也可以为特定用户角色提供自定义的功能和权限。因此,具体的角色和等级对应关系可能会因具体的设置和配置而有所不同。

自 WordPress 2.0.0 版本开始,WordPress 引入了用户能力(User Capability)的概念,取代了之前的用户级别(User Level)系统。这一变化对于用户的访问控制和权限管理带来了重要的改变。

用户能力是一种更灵活和可扩展的权限管理机制,允许管理员根据具体的功能和操作为用户分配不同的权限。每个用户能力都代表了一项特定的操作或功能,例如编辑文章、发布评论、管理插件等。

三、用户能力的使用

在使用用户能力进行访问控制时,可以通过 WordPress 提供的函数来检查用户是否具有特定的能力。以下是几个常用的函数:

  • current_user_can($capability):检查当前登录用户是否具有指定的能力。
  • user_can($user_id, $capability):检查指定用户是否具有指定的能力。
  • map_meta_cap($cap, $user_id, $args):用于将旧的用户级别映射到新的用户能力。

通过使用这些函数,管理员可以根据具体需求为用户分配和管理各种功能和操作的权限。

四、迁移和更新代码

我找到一个方向,通常情况下,将用户级别(例如level_10)更改为相应的能力名称是修复此问题的一种常见方法。比如将user_can()函数替换为current_user_can()函数,实例:

<?php if(user_can($comment->user_id, 1)); ?>

修改为

<?php if(current_user_can('edit_posts', $comment->user_id)); ?>

关于用户级别的检查。比如将以下代码:

if (current_user_can('level_10')) {

修改为:

if (current_user_can('edit_posts')) {

这将检查当前用户是否具有编辑帖子的能力。根据 WordPress 的用户角色和权限体系,level_0 对应于具有读取(read)能力的用户。而 level_10 则对应于具有编辑文章(edit_posts)的能力的用户。

通过使用能力名称而不是固定的用户级别,可以更灵活地适应用户角色和权限的变化,从而提高代码的可维护性和适应性。

我是因为开启了评论等级才会出现这个警告,把这功能关闭就没有这个提示了。

请注意,为了确保代码的正确性和安全性,最好在修改代码之前备份你的文件或测试代码的更改。

weinxin
公众号
闹着玩下网
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: