跳至正文

批量查找和替换 WordPress 数据库——最简单的方法

批量查找和替换 WordPress 数据库——最简单的方法

在很多情况下,我们必须更改 WordPress 网站数据库中的 URL例如,我们需要在将 WordPress 数据库从一个站点(例如,从http://acme.com远程生产站点)迁移到http://acme.dev我们计算机上的本地开发网站后执行此操作。

WordPress.org 拥有大量插件,例如WP DBManagerWP Migrate DB,还有许多第 3 方工具可让您轻松导入数据库棘手的部分是必须更改数据库中的每个 URL 实例。

迁移数据库后,其中的 URL仍指向旧站点,在本例中为acme.com. 您可能会在表中找到旧的 URL ,设置为和选项wp_options的值,它也可能嵌入到数据库中的其他几个行和表中。这些旧的 URL 最终可能会阻止您的网站正常运行,因此您需要将它们更改为新的 URL,在我们的示例中为siteurlhomeacme.dev

OS X 中的 Sequel Pro 数据库界面
IMAGE: Sequel Pro,搜索数据库值

此时,随意访问我们的开发站点acme.dev只会导致一个空白页面

那么我们如何更改数据库中的所有这些 URL 呢?

运行 SQL 查询

通常,人们会运行以下 SQL 查询来替换表中的siteurl和选项的值homewp_options

1个
2个
3个
UPDATE wp_options SET option_value =
replace(option_value, 'http://acme.com', 'http://acme.dev')
WHERE option_name = 'home' OR option_name = 'siteurl';

随后,他们使用另一个 SQL 查询来替换表中出现的所有 URL wp_posts,即post_content每一行的列中。

1个
2个
UPDATE wp_posts SET post_content =
replace( post_content, 'http://acme.com', 'http://acme.dev' );

运行这些查询是一个可行的解决方案,但同时执行起来并不方便。看到数据库可能由于查询中的一个简单疏忽而变得失控,甚至会让人伤脑筋。

利用 WP-CLI

我们可以做的另一条路线是利用 WP-CLI 命令行,我发现这是一种更方便的选择这意味着您需要安装 WP-CLI

假设您已经安装了 WP-CLI 并且可以wp作为别名访问该命令,请导航到您的 WordPress 站点文件所在的目录。

然后,运行以下命令:

1个
wp search-replace 'http://acme.com' 'http://acme.dev

第一个参数'http://acme.com'是要被第二个参数替换的旧条目'http://acme.dev'

用于搜索和替换操作的 WP-CLI 表报告。

命令行将搜索数据库中的所有表,而不仅仅是post_content列和wp_options表,并替换通过命令参数传递的条目的每个实例。

从上面的截图可以看出,一共做了225次替换。我们已经通过一个简单的命令行完成了它。

我认为值得一提的是,我们可以使用该wp search-replace命令,不仅可以替换 URL,还可以替换存储在数据库中的任何值。我们也可以通过传递表名作为第四个参数来限制对某个表的操作,如下:

1个
wp search-replace '.jpg' '.webp' wp_posts

运行上面的命令,它只会搜索wp_posts存储我们内容(帖子、页面等)的表格,并将图像扩展名替换.jpg.webp

WP-CLI 让错综复杂的 SQL 操作看起来更直观,你可以更方便地使用它。如果你想微调你的命令,请查看 WP-CLI 的文档,它为你提供了一个选项列表,可以使用命令执行更高级的操作wp search-replace

标签: