
本文介绍通过 MySQL 直接更新数据库的方式,安全高效地将 WooCommerce 所有商品中可下载文件的域名(如 https://my-site.com)统一替换为新域名(如 https://replace-site.com),适用于数千商品的批量处理场景。
本文介绍通过 mysql 直接更新数据库的方式,安全高效地将 woocommerce 所有商品中可下载文件的域名(如 https://my-site.com)统一替换为新域名(如 https://replace-site.com),适用于数千商品的批量处理场景。
WooCommerce 将可下载文件的 URL 存储在 wp_postmeta 表中,对应键名为 _downloadable_files(序列化数组)以及可能出现在商品描述(wp_posts.post_content)或自定义字段中的明文链接。由于你有 2500 个产品,手动修改不现实,推荐使用精准的 SQL 更新语句批量处理。
✅ 核心操作(MySQL 命令):
请务必在执行前完整备份数据库(尤其是 wp_postmeta 和 wp_posts 表),并确保新旧域名协议一致(如均含 https://):
-- 1. 更新站点基础设置(可选,仅当需同步 siteurl/home)
UPDATE wp_options SET option_value = REPLACE(option_value, 'https://my-site.com', 'https://replace-site.com')
WHERE option_name IN ('home', 'siteurl');
-- 2. 更新商品正文、摘要等富文本内容中的链接(重要)
UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://my-site.com', 'https://replace-site.com')
WHERE post_type = 'product' AND post_status = 'publish';
-- 3. 关键步骤:更新所有 meta 值(含 _downloadable_files、_thumbnail_id 对应附件 URL、自定义字段等)
UPDATE wp_postmeta
SET meta_value = REPLACE(meta_value, 'https://my-site.com', 'https://replace-site.com')
WHERE meta_value LIKE '%https://my-site.com%';
⚠️ 重要注意事项:
-
不要直接用
REPLACE()处理序列化数据(如_downloadable_files的 PHP 序列化字符串),否则会破坏长度结构导致解析失败。上述第 3 条语句虽能匹配明文 URL,但对已序列化的数组存在风险。更稳妥的做法是:
✅ 使用专业迁移插件(如 Better Search Replace 或 WP Migrate DB),它们支持智能反序列化处理;
✅ 或改用 WordPress CLI(推荐):wp search-replace 'https://my-site.com' 'https://replace-site.com' --all-tables --include-columns=meta_value,post_content --dry-run # 确认无误后移除 --dry-run 再执行
执行后,进入 WordPress 后台 →「设置」→「固定链接」→ 点击「保存更改」,刷新重写规则。
替换完成后,随机抽查 3–5 个商品,在「产品编辑页 → 下载选项」中点击「编辑下载文件」,确认 URL 已更新且文件仍可正常访问。
若使用 CDN 或对象存储(如 S3),请确保新域名已正确配置 DNS 与证书,并检查文件实际可访问性。
? 总结:
纯 SQL 替换速度快,但对序列化字段有隐患;生产环境强烈建议优先使用支持反序列化识别的工具(如 Better Search Replace 插件),兼顾效率与安全性。域名变更本质是全站资源路径迁移,务必测试+备份+验证三步缺一不可。










