十几个WordPress站想统一导出所有用户数据,按角色筛选、排除管理员、带上自定义字段,哪个工具能一步搞定?
做站群的人迟早会遇到一个问题:十几个站的用户数据散在各个数据库里,想拉一份统一报表、想做用户合并、想给付费用户统一发邮件——这时候你会发现,每个站单独登录后台手动导出一遍,光是登录操作就要花掉大半天。
更烦的是,不同站装的插件不同、数据库表结构不完全一样、自定义字段的叫法也不统一。用WordPress自带导出工具导出来的XML文件根本没法直接合并分析。这篇文章把从单站导出到多站统一导出的完整方案捋一遍,十几个站和几百个站不是一回事,方案差很大。
先搞清楚你要导出什么——六种常见需求场景
| 1 | 站点迁移/合并:把A站所有用户(含密码哈希)搬到B站,用户无感知 |
| 2 | 客户报表导出:按付费等级/注册时间/角色筛选后导出CSV,给运营或财务用 |
| 3 | 邮件营销导入:把活跃用户邮箱+昵称导出,导入Mailchimp/SendGrid等EDM工具 |
| 4 | 用户数据清洗:找出僵尸用户、重复注册、异常数据,导出后统一处理再回写 |
| 5 | 站群统一看板:多个站的数据汇聚到一张表,看总量、看增长、看活跃度 |
| 6 | 合规备份/审计:GDPR或行业审计要求保留用户数据完整导出记录 |
场景不同,选工具的逻辑完全不同。场景1迁移合并最看重密码哈希能不能原样带过去(让用户不用重置密码),场景2报表导出最看重筛选条件够不够灵活,场景5站群看板最看重能不能自动化、能不能跨站点统一格式。
一、WordPress插件方案:四个主流工具,功能差在哪

WordPress生态里用户导出插件不少,但真正能在站群场景下用起来的就那几个。先看对比:
| 工具 | 导出格式 | 角色筛选 | 自定义字段 | 密码哈希 | 价格 |
|---|---|---|---|---|---|
| WebToffee Import Export Users | CSV/XML | ✅ | ✅ | ✅ | 免费版可用,付费版$69/年 |
| WP All Export | CSV/Excel/XML | ✅ | ✅ | ❌ | $99/年起 |
| Import and Export Users and Customers | CSV | ✅ | ✅ | ✅ | 免费 |
| WP Ultimate CSV Importer | CSV/XML/JSON | ✅ | ✅ | ✅ | 免费版有限制,付费版$79/年 |
密码哈希能不能导出是个关键分水岭。如果你的目的是站间迁移(用户不用重置密码),必须选支持哈希导出的工具。如果你的目的是报表或邮件营销(只需要邮箱、昵称、注册时间),那WP All Export的筛选灵活度和Excel支持反而是优势。
WebToffee免费版够用吗? 免费版支持导出全部用户到CSV,包含基本字段(ID、用户名、邮箱、角色、注册日期)。如果你只需要导出全部用户到CSV做报表,免费版完全够。但如果你要按特定条件筛选(比如只导出订阅者、排除管理员、只导出最近30天注册的用户),或者要导出自定义字段(比如WooCommerce客户的手机号、收货地址),就需要Pro版。
二、多站场景下的关键问题:插件导出,十个站就是十次操作
上面四个插件解决的是单站导出的问题。但站群场景下,你有10个、20个、甚至50个站,每个站装一遍插件、登录后台、选条件、导出、下载……一套流程走下来,一天就过去了。
这个问题的解法取决于你的站点架构:
WordPress Multisite(多站点网络):所有子站共享一套用户表(wp_users和wp_usermeta),技术上只需要导出一次就覆盖所有站点。但Multisite的用户是按站点绑定的——一个用户在A站是订阅者,在B站可能是编辑,这些关联关系存在wp_blogs和wp_signups表里。直接用插件导出的是全局用户表,你需要额外查询每个用户在哪个站点有什么角色。
独立WordPress站点(各自独立的数据库):每个站都是一个孤岛,插件导出解决不了统一汇总的问题。这种情况下只有两条路:要么写脚本批量连数据库,要么用支持远程导出的工具。
独立站点导出最常踩的坑:不同站的自定义字段名不一样。A站的用户手机号存在user_phone字段,B站存在billing_phone字段,C站存在phone_number字段。导出完十份CSV,字段名对不上,合并时手动对齐就能把人逼疯。所以做站群之前就应该统一自定义字段命名规范,后期导出成本低十倍。
三、数据库直连方案:绕过插件,一把导出所有站
独立站点规模大了以后,插件方案就撑不住了。数据库直连方案能批量连多个站的数据,核心逻辑是用PHP或Python脚本循环所有站点的数据库连接信息 → 执行同样的SQL查询 → 汇总到一个文件。
phpMyAdmin是第一步。单个站通过phpMyAdmin导出用户表很简单:选数据库 → 导出 → 选wp_users和wp_usermeta → 格式选CSV → 下载。但批量场景下,你得手动切换数据库重复操作N次。phpMyAdmin有一个不常用的功能:在"导出"页面勾选"将数据库导出为独立文件",可以一次性导出所有数据库,每个库一个文件。这样你至少不用来回切换了。
MySQL Workbench和Navicat是桌面端数据库管理工具,都支持批量导出。Navicat的数据传输功能可以设置多个数据库连接,批量执行SELECT查询后统一导出。MySQL Workbench免费,但批量操作不如Navicat方便。Navicat Premium支持同时连接MySQL、PostgreSQL、SQLite等不同数据库——如果你的站群混用了不同数据库,这个特性就很实用。
不过数据库工具的问题是:你导出的是原始数据表,不是WordPress用户层面的结构化数据。wp_users表里只有ID、用户名、邮箱、密码哈希等基础字段,用户的昵称、角色、注册IP、WooCommerce消费记录等都在wp_usermeta表里。meta表的key-value结构要转成宽表(每列一个字段)才能直接分析,SQL写起来并不直观。
四、自建脚本方案:十几行Python代码,50个站一次跑完
如果插件方案效率低、数据库工具导出来还需要二次处理,自建一个导出脚本是长期来看最省事的方案。核心逻辑不复杂:
import mysql.connectorimport csvimport jsonfrom datetime import datetime# 站点数据库配置列表with open('sites_config.json', 'r') as f:sites = json.load(f)all_users = []for site in sites:conn = mysql.connector.connect(host=site['host'],user=site['user'],password=site['password'],database=site['database'],charset='utf8mb4')cursor = conn.cursor(dictionary=True)# 导出用户基础信息 + 指定meta字段cursor.execute("""SELECTu.ID, u.user_login, u.user_email,u.user_registered, u.user_status,MAX(CASE WHEN m.meta_key = 'nickname' THEN m.meta_value END) as nickname,MAX(CASE WHEN m.meta_key = 'first_name' THEN m.meta_value END) as first_name,MAX(CASE WHEN m.meta_key = 'last_name' THEN m.meta_value END) as last_name,MAX(CASE WHEN m.meta_key = 'wp_capabilities' THEN m.meta_value END) as roleFROM {prefix}users uLEFT JOIN {prefix}usermeta m ON u.ID = m.user_idWHERE m.meta_key IN ('nickname','first_name','last_name','wp_capabilities')GROUP BY u.ID""".format(prefix=site['table_prefix']))for row in cursor:row['site_name'] = site['name']row['export_time'] = datetime.now().isoformat()all_users.append(row)cursor.close()conn.close()# 统一写入CSVwith open('all_users_export.csv', 'w', newline='', encoding='utf-8-sig') as f:if all_users:writer = csv.DictWriter(f, fieldnames=all_users[0].keys())writer.writeheader()writer.writerows(all_users)print(f"导出完成:{len(sites)}个站点,共{len(all_users)}条用户记录")这个脚本30行出头,核心思路就是循环站点配置 → 连数据库 → 执行统一SQL → 合并写入一个CSV。MySQL用mysql-connector-python,PostgreSQL换psycopg2,SQLite直接用sqlite3。建一个sites_config.json存所有站的数据库连接信息,每次要改的就是meta字段列表(你需要导出哪些自定义字段就加进去)。

脚本方案的两个额外好处:①可以接定时任务(crontab每天凌晨跑一次),自动生成每日用户数据快照;②可以在SQL层面就做筛选和清洗(排除管理员、只要最近30天注册的、只要邮箱已验证的),避免导出后再手动过滤。
五、WooCommerce和会员站点的特殊导出需求
如果你的站带WooCommerce商城或者装了会员插件(MemberPress、Ultimate Member、Paid Memberships Pro等),用户数据的复杂度会上一个台阶。普通WordPress站一个用户只有两行数据(users + usermeta),WooCommerce站一个用户关联订单表、订阅表、会员等级表、积分表——导出逻辑完全不一样。
WooCommerce客户导出
WebToffee的付费版专门支持WooCommerce客户导出,可以导出消费总额、订单数、最后下单时间、收货地址等。WooCommerce自带的"客户导出"功能在"WooCommerce → 报表 → 客户"里,只能导出基础字段。
会员插件用户导出
MemberPress自带CSV导出功能(Memberships → Export),可以按会员等级、订阅状态、到期时间筛选。Ultimate Member的导出需要借助第三方插件或直接查usermeta表。
订阅制站点用户导出
WooCommerce Subscriptions的订阅数据存在独立的subscriptions表里。导出时要把user → subscription → order三张表做关联查询,才能得到"哪些用户有活跃订阅、下次续费是什么时候"。
电商和会员站导出时有一个容易忽略的点:用户敏感数据。收货地址、手机号、真实姓名这些数据在GDPR和个保法框架下属于个人信息,导出时必须确认用途合规、存储安全。不要把包含用户手机号的CSV文件直接发到微信群里——这种事出过不少安全事故。
六、站群用户数据统一看板的搭建思路
导出的最终目的不是存一份CSV,而是能让数据用起来。站群用户数据统一看板的价值在于:一眼看到所有站点的用户总量、增长趋势、活跃度分布,不用单独登录每个站的后台。
搭建流程不复杂:
第一步:统一数据格式。不管你用插件导出还是脚本导出,最终要确保每个站产出的CSV列名一致。建议定一套标准字段:site_name, user_id, user_email, display_name, role, registered_date, last_login, order_count, total_spent。不同站可能某些字段为空,但列名必须对齐。
第二步:选个轻量分析工具。站群规模不大的话,把CSV导入Google Sheets或者飞书多维表格就够用了,透视表做汇总、筛选器做分站查看。想更专业一点就用Metabase(开源免费,连MySQL直接查)、或者Grafana做可视化大盘。
第三步:自动化定时更新。脚本扔到服务器crontab里每天跑一次,生成的CSV自动覆盖昨天的版本。如果是Metabase或Grafana方案,直接连数据库实时查,不需要导出中间文件。
第四步:接入UC建站系统的多站看板。如果你的站群在UC建站系统上统一管理,多站看板已经聚合了各站点的用户数据——注册数、活跃用户、付费转化率,不需要自己从零搭数据管线。
七、按场景选方案:别为了导出10个用户去搭一套数据仓库
| 你的场景 | 推荐方案 | 理由 |
|---|---|---|
| 1-3个站,偶尔导出 | WebToffee免费版插件 | 零成本,10分钟搞定,不需要技术背景 |
| 3-10个站,需要角色筛选 | WebToffee Pro + 手动汇总 | $69/年,筛选灵活,导出后Excel合并 |
| 10-30个独立站 | Python脚本直连数据库 | 一次配置,定时自动跑,统一格式输出 |
| WordPress Multisite | SQL直查 + 站点角色关联查询 | 共享用户表,重点是查每个用户在哪个站 |
| 30+站,需要日常看板 | 脚本 + Metabase/Grafana 或 UC多站看板 | 自动化是必须的,手动操作不可持续 |
| WooCommerce/会员站 | WebToffee Pro(电商版)+ 脚本辅助 | 订单和会员数据关联复杂,插件省心 |
说穿了,用户数据导出不是一个工具选型问题,而是数据管理习惯的问题。如果一开始站群的数据结构就不统一(自定义字段乱起名、不同站用不同插件、数据库前缀五花八门),后面不管用什么工具导出都会遇到一堆手工对齐的工作。
建站的时候就定好规矩——用户自定义字段的命名规范、表前缀规范、必须字段清单——后面批量导出就是一条SQL的事。前期不花这半小时定规范,后期每个站导出要多花半小时做数据清洗,站越多亏得越多。
