You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将WP_Role转为字符串时,如何为其添加权限?

问题分析与修复

错误根源是两处代码逻辑问题:

  • array_fill_keys($rolesToPopulate, NULL):array_fill_keys要求第一个参数是可转换为字符串的键名数组,但你传入的是WP_Role对象数组,PHP尝试将对象转为字符串时触发了报错。
  • echo $roles:直接echo数组本身就会输出Array,若数组包含对象还会触发类型转换异常,这行代码完全没有必要保留。

修复后的代码方案一(直接处理角色对象数组)

public static function add_csv_capability(): void {
    // 直接获取目标角色的对象并存入数组
    $roles = [get_role('administrator'), get_role('editor')];
    
    foreach ($roles as $role) {
        // 严谨判断角色对象存在后,添加权限
        if ($role instanceof WP_Role) {
            $role->add_cap('use_csv_uploader');
        }
    }
}

修复后的代码方案二(先存角色名,再循环处理)

这种方式扩展性更强,后续新增角色只需往数组里加名称即可:

public static function add_csv_capability(): void {
    // 定义需要赋予权限的角色名称列表
    $role_names = ['administrator', 'editor'];
    
    foreach ($role_names as $role_name) {
        $role = get_role($role_name);
        if ($role instanceof WP_Role) {
            $role->add_cap('use_csv_uploader');
        }
    }
}

额外说明

  • 完全不需要使用array_fill_keys,你要做的只是遍历角色对象并添加权限,没必要构建以角色对象为键的数组。
  • 用instanceof WP_Role代替单纯的if ($role)判断,能更严谨地避免非角色对象引发的潜在问题。

内容的提问来源于stack exchange,提问作者scareaphina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 06:06:45