WP笔记

如何批量替换WordPress网站的内容

网站域名变了,文章内容里的地址没替换咋办?是你移动网站的方法不对吗?不一定啊,如果你自己搞了个cdn叫content.mysite.com,用duplicator插件移动网站时还觉得ok,活干完就后悔了,“哎呀,我怎么不用个更时髦的地址呢”。没关系,这时候我们可以召唤一款能比较精准的替换数据库内容的插件——Better Search Replace

批量替换的理想操作

  1. 能限定哪些表需要替换,自由很重要,不想被迫替换所有。
  2. 能处理序列化的字符串替换,比如widget里的内容是这么存的,正常的替换只会让你被迫延长工作时间。
  3. 可以不更新数据库的情况下测试运行,看看结果是不是和你想要的一致,防止一失足成千古恨。
  4. 测试运行或实际运行的详细结果最好来一份,告诉我到底哪些地方替换了。替换数据最怕什么?检查啊,万一有个地方替换错了呢。在一个页面检查总好过访问几百个链接检查来的好。
  5. 最好支持中文。

Better Search Replace插件完美支持前三条,第四天要买收费版,否则就是个简单到基本没啥用的结果。第五条就靠作者或者某位大神去翻译一下了。

批量替换WordPress内容实战

咱就创建一篇文章测试一下,是骡子是马拉出来遛遛。我准备把 http://www.mysite.com替换成 https://www.mysite.com,测试的文章如下图所示,整站只有这篇文章里有这个链接。

待替换的文章

找到工具菜单下的Better Search Replace,填写替换地址,table选择wp_posts,Case-Insensitive问你要区分大小写吗,要就选上。Replace GUIDs嘛,如果你替换的内容不是URL,或者是URL但不是站内地址,那都不需要选。因为guid长这个样子:

http://yourdomain.com/?p=758
替换的设置

最后,记得选上Run as dry run测试运行。大力点击“Run Search/Replace”,我那0.2MB的小数据瞬间替换完。打开日志,哇,好简单明了,字字黄金。

运行结果

这里Sola解释一下,找到3条结果是啥意思?我需要替换的地方只是一篇文章里的两行字啊,好像和3没啥关系呢。这个3的意思是找到了3个posts,因为post可以有revisions,或者auto-draft等不为人所熟悉的状态。结果肯定没错啦,检查一下。

实际替换后

下面我们再替换一下侧栏小工具(widget)里的内容,我在小工具里加了一段话,我觉得小马宝莉更可爱,把“毛驴”替换成“马”吧,直接看图。

设置,widget数据保存在wp_options表里
替换前
替换后

再说检查问题,如果你只是想替换一些链接,可以用Broken Link Checker插件来检查,这个插件管自己叫失效链接检查插件,实际能列出所有链接,只要链接敢出现在数据库里,它就能帮你揪出来,还挺好用的。