WordPress 多站点批量修改用户角色脚本
› 社区话题 › wordpress修复站点角色权限,重新赋予用户角色 › WordPress 多站点批量修改用户角色脚本
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);
}
});