0

我最近从 PublishPress 安装并卸载了一个名为 Advanced Gutenberg 的插件。

为多个角色执行wp cap list <role>操作会显示它留下的自定义上限,所有前缀均以advgb. 除了为使用 逐一修改的每个角色删除这些功能之外wp cap remove <role> <cap>,是否有办法删除插件应该自行删除的所有这些垃圾功能?

仔细观察数据库,似乎 Advanced Gutenberg 将大写直接添加到表的wp_user_roles选项中wp_options。此选项的值是一些我不理解且不想冒险手动编辑的类似 JSON 的语法:

a:5:{s:13:"管理员";a:2:{s:4:"姓名";s:13:"管理员";s:12:"能力";a:69:{s:13 :"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:" edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories" ;b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b :1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1 ;s:4:"读取";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s :7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7: "level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pa​​ges ";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pa​​ges"; b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b: 1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1; s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;s:17:"unfiltered_upload";b:1;s:14:"edit_dashboard";b:1;s:14:"update_plugins";b:1;s:14:"delete_plugins";b:1;s: 15:"install_plugins";b:1;s:13:"update_themes";b:1;s:14:"install_themes";b:1;s:11:"update_core";b:1;s:10: "list_users";b:1;s:12:"remove_users";b:1;s:13:"promote_users";b:1;s:18:"edit_theme_options";b:1;s:13:"delete_themes ";b:1;s:6:"导出";b:1;s:19:"edit_advgb_profiles";b:1;s:26:"edit_others_advgb_profiles";b:1;s:21:"create_advgb_profiles"; b:1;s:22:"publish_advgb_profiles";b:1;s:21:"delete_advgb_profiles";b:1;s:28:"delete_others_advgb_profiles";b:1;s:18:"read_advgb_profile";b: 1;s:27:"read_private_advgb_profiles";b:1;s:17:"edit_others_posts";b:1;}}s:6:"editor";a:2:{s:4:"name";s:6:"Editor";s:12:"capabilities";a:37: {s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s :15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13 :"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:" level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2" ;b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pa​​ges";b :1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pa​​ges";b:1;s:12:"delete_posts" ;b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b :1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1 ;s:18:"read_advgb_profile";b:1;s:27:"read_private_advgb_profiles";b:1;s:19:"edit_advgb_profiles";b:1;}}s:6:"作者";a:2 :{s:4:"姓名";s:6:"作者";s:12:"能力";a:15:{s:20:"edit_published_posts";b:1;s:13:"publish_posts" ;b:1;s:4:"读取";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:22:"delete_published_posts";b:1;s:12:"upload_files" ;b:1;s:19:"edit_advgb_profiles";b:1;s:18:"read_advgb_profile";b:1;s:27:"read_private_advgb_profiles";b:1;s:17:"moderate_comments";b :1;s:20:"delete_private_posts";b:1;s:12:"delete_posts";b:1;s:10:"edit_posts";b:1;}}s:11:"贡献者";a :2:{s:4:"姓名";s:11:"贡献者";s:12:"能力";a:7:{s:10:"edit_posts";b:1;s:4:"读取";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:18:"read_advgb_profile" ;b:1;s:27:"read_private_advgb_profiles";b:1;}}s:10:"订阅者";a:2:{s:4:"姓名";s:10:"订阅者";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}

这是什么语法,如何仅删除其中包含的键值对advgb

4

1 回答 1

1

由于我已经使用wp-cli(强烈推荐用于 Wordpress 开发工作),我设法通过快速 Bashfor循环解决了这个问题:

for i in `wp role list --field=role`; do wp cap remove "$i" <cap1> <cap2> <cap3>; done

我在 Cygwin 中运行它,但它可以在 WSL 或 Mac 终端中轻松运行。

只需确保wp-cli已安装并替换<cap1>,<cap2>等插件添加到您的角色的每个功能(您可能只需要检查一个角色即可获得这些功能) - 然后代码将遍历您的每个角色并删除所有给定的上限。

$ for i in `wp role list --field=role`; do wp cap remove "$i" read_advgb_profile read_private_advgb_profiles edit_advgb_profiles; done
Success: Removed 3 capabilities from 'administrator' role.
Success: Removed 3 capabilities from 'editor' role.
Success: Removed 3 capabilities from 'author' role.
Success: Removed 3 capabilities from 'contributor' role.
Success: Removed 3 capabilities from 'subscriber' role.
于 2021-09-02T14:28:17.297 回答