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

如何删除WordPress插件卸载后残留的自定义cap权限

关于你看到的特殊语法

那不是JSON,是PHP序列化格式,是PHP将数组/对象转换为可存储字符串的标准格式,字符串前的s:13代表后面的字符串长度为13个字符,a:5代表后面是包含5个元素的数组,b:1代表布尔值真。
绝对不要直接手动修改该字段值,只要字符长度和标注的长度不匹配,PHP反序列化就会直接失败,导致全站角色权限配置失效。

批量清理冗余权限的安全方案

两种方案都基于WordPress原生接口操作,不会破坏序列化结构,安全性远高于直接修改数据库。

方案1:用WP CLI批量清理(最推荐,你已经在使用WP CLI工具)

  1. 先执行备份命令,防止操作出错可以回滚:
wp option get wp_user_roles --format=json > wp_user_roles_backup.json

如果后续操作出错,执行以下命令即可恢复原有权限配置:

wp option update wp_user_roles --format=json < wp_user_roles_backup.json
  1. 执行批量删除命令,自动遍历所有角色、所有权限,删除所有advgb前缀的权限:
wp role list --field=name | while read role; do wp cap list "$role" | grep "advgb" | while read cap; do wp cap remove "$role" "$cap"; done; done

方案2:用PHP代码临时执行(适用于无法使用WP CLI的场景)

  1. 先备份你的网站数据库
  2. 在WordPress站点根目录新建一个clean_advgb_caps.php文件,写入以下内容:
<?php
// 加载WordPress核心
require_once 'wp-load.php';

// 校验PHP版本兼容的前缀匹配
function cap_has_advgb_prefix($cap) {
    if (function_exists('str_starts_with')) {
        return str_starts_with($cap, 'advgb');
    }
    return strpos($cap, 'advgb') === 0;
}

// 遍历所有角色清理权限
foreach (array_keys(wp_roles()->roles) as $role_slug) {
    $role = get_role($role_slug);
    if (!$role) continue;
    foreach (array_keys($role->capabilities) as $cap) {
        if (cap_has_advgb_prefix($cap)) {
            $role->remove_cap($cap);
        }
    }
}

echo '所有advgb前缀冗余权限清理完成,请立即删除本文件!';
  1. 访问你的站点域名/clean_advgb_caps.php执行清理,执行完成后立刻删除这个php文件,避免被他人恶意调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:15:01