为什么在插件停用期间,User_Can会为某个功能返回FALSE?

时间:2017-04-06 作者:iyrin

user_can(int | object$user,string$capability)

特定用户是否具有功能或角色。

文档中说,这应该适用于功能,但到目前为止,它只适用于角色。This is being run during plugin deactivation.

使用功能作为参数返回false:
user_can( $user_id, \'read\' )

使用角色作为参数返回true:
user_can( $user_id, \'my_custom_role\' )

我已确认用户有使用的能力var_dump( get_userdata( $user_id ) );

输出摘录:

  public \'allcaps\' => 
    array (size=3)
      \'my_custom_cap\' => boolean true
      \'read\' => boolean true
      \'my_custom_role\' => boolean true
为什么user_can() 认识角色,但不认识能力?

如果你看看source 对于user_can(), 它依赖于get_userdata() 也为什么它看到一个,但看不到另一个?谁能复制这个,还是只有我?

编辑:我已经确认user_can( $user_id, \'read\' ) 退货true 在主插件期间,但在停用期间运行时,它似乎没有返回值。在插件停用期间,有人能让这个返回true吗?为什么它返回的是空值而不是true或false?

1 个回复
最合适的回答,由SO网友:iyrin 整理而成

这是我停用脚本中的一个非常简单的错误。在删除用户的函数之前调用了删除自定义角色的函数。

这是导致混淆的部分:当角色被删除时,它将变得不可用,但分配给该角色的用户仍将在其用户数据中保留该角色。这就是为什么对属于此角色的用户的条件检查仍然返回true的原因。因此,我希望这些功能能够保留下来,因为对角色的检查返回true。当角色存在于用户数据中时,此角色的功能将被清空。

我仍然不知道为什么它似乎返回空而不是显式返回false,即使它被视为false,但在我的代码中执行is时,用户实际上没有这些功能,因为角色不存在。

我认为,用户数据中保留角色的主要目的是,可以删除角色,然后再次添加,之前分配给该角色的所有用户将再次恢复对该角色所有功能的访问。

相关推荐

正在尝试获取wp-includes/capabilities.php中非对象的属性

在调试中,我每分钟都会收到以下通知序列。日志:[23-Oct-2012 13:27:33 UTC] PHP Notice: Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1022 [23-Oct-2012 13:27:33 UTC] PHP Notice: Trying to get property of non-object in mysite/wp-includes/