wordpress修复站点角色权限,重新赋予用户角色

VFX大学 wordpress修复站点角色权限,重新赋予用户角色

正在查看 1 条回复
  • 作者
    帖子
    • #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
      }
      });
      
      
    • #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 条回复
  • 在下方一键注册,登录后就可以回复啦。