wordpress修复站点角色权限,重新赋予用户角色
› VFX大学 › wordpress修复站点角色权限,重新赋予用户角色
- This topic has 2 个回复, 1 个参与人, and was last updated 2 天, 17 小时 前 by
追光.
正在查看 1 条回复
- 作者帖子
- 2025年7月9日 - 下午5:38 #238
追光管理员在 WordPress 多站点中,某些用户可能没有被正确加入到子站点,或缺失角色。此脚本将扫描所有未关联指定子站点的用户,并赋予 subscriber 角色,避免出现登录错误、权限异常等问题。
nano frps.atoml
这种情况常见于:
• 搬迁站点、导入数据库后权限异常
• 某些插件覆盖了 wp_user_roles 选项
• 用户加入了站点但未分配角色
• 管理员误删了某些角色定义
• BuddyPress 社区中某些用户未自动加入站点(无角色)使用方法:
1. 将以下代码放入任意子站点或主站的 functions.php 中。
2. 登录管理员账户后访问链接:
https://你的站点地址/?fix_users_now=1
3. 页面将输出修复进度和结果。
4. 如需修复其他子站,请修改代码中的站点 ID。记得操作前务必要备份Mysql数据库。
代码如下(无需 HTML 样式):
function run_user_batch_to_site_with_output($blog_id = 1, $batch_size = 50) { @set_time_limit(0); @ini_set(‘memory_limit’, ‘512M’); if (!function_exists(‘add_user_to_blog’)) { require_once ABSPATH . ‘wp-includes/ms-functions.php’; } $offset = 0; $total_fixed = 0; echo “开始扫描用户…\n”; do { $users = get_users([ ‘blog_id’ => 0, ‘number’ => $batch_size, ‘offset’ => $offset, ‘fields’ => [‘ID’], ]); if (empty($users)) break; foreach ($users as $user) { $caps_key = “wp_{$blog_id}_capabilities”; $user_caps = get_user_meta($user->ID, $caps_key, true); if (empty($user_caps)) { add_user_to_blog($blog_id, $user->ID, ‘subscriber’); echo “✅ 修复用户 {$user->ID},分配 subscriber 角色\n”; $total_fixed++; } else { echo “⏩ 用户 {$user->ID} 已有角色,跳过\n”; } flush(); } $offset += $batch_size; echo “— 当前偏移:{$offset},累计修复:{$total_fixed} —\n”; flush(); } while (count($users) === $batch_size); echo “✅ 执行完毕,合计修复用户数:{$total_fixed}\n”; exit; } add_action(‘init’, function () { if (isset($_GET[‘fix_users_now’]) && current_user_can(‘manage_network_users’)) { run_user_batch_to_site_with_output(1); // 替换为你要修复的子站点 ID } });
- 2025年7月9日 - 下午5:50 #247
追光管理员WordPress 多站点批量修改用户角色脚本,更全面的控制方式,记得操作前务必要备份Mysql数据库。
使用方法用法
把 site 换成你要操作的站点 ID;batch 是每次批处理多少用户;role 是你想给所有用户统一设置的角色(比如 subscriber、editor、contributor 等)。https://your-site.com/?batch_update_role=1&site=3&batch=100&role=contributor
WordPress 多站点批量修改用户角色脚本
function batch_update_site_users_role($blog_id = 1, $batch_size = 50, $new_role = ‘subscriber’) { @set_time_limit(0); @ini_set(‘memory_limit’, ‘512M’); $offset = 0; $total_updated = 0; echo “🚀 开始修改站点 ID {$blog_id} 中用户角色为 ‘{$new_role}’,每批 {$batch_size} 个用户\n”; do { $users = get_users([ ‘blog_id’ => $blog_id, ‘number’ => $batch_size, ‘offset’ => $offset, ‘fields’ => [‘ID’, ‘roles’], ]); if (empty($users)) break; foreach ($users as $user) { $current_roles = $user->roles; if (empty($current_roles) || !in_array($new_role, $current_roles)) { switch_to_blog($blog_id); $wp_user = new WP_User($user->ID); $wp_user->set_role($new_role); restore_current_blog(); echo “✅ 用户 {$user->ID} 角色从 [” . implode(’, ’, $current_roles) . “] 修改为 ‘{$new_role}’\n”; $total_updated++; } else { echo “⏩ 用户 {$user->ID} 已有角色 ‘{$new_role}’,跳过\n”; } flush(); } $offset += $batch_size; echo “— 当前偏移:{$offset},已修改用户数:{$total_updated} —\n”; flush(); } while (count($users) === $batch_size); echo “✅ 全部完成,总共修改用户数:{$total_updated}\n”; exit; } add_action(‘init’, function () { if (isset($_GET[‘batch_update_role’]) && current_user_can(‘manage_network_users’)) { $blog_id = isset($_GET[‘site’]) ? intval($_GET[‘site’]) : 1; $batch_size = isset($_GET[‘batch’]) ? intval($_GET[‘batch’]) : 50; $role = isset($_GET[‘role’]) ? sanitize_text_field($_GET[‘role’]) : ‘subscriber’; batch_update_site_users_role($blog_id, $batch_size, $role); } });
- 作者帖子
正在查看 1 条回复
- 在下方一键注册,登录后就可以回复啦。