WP CLI说明文档

wp search-replace

命令概述

在数据库表的所有行中搜索指定字符串并将其替换为新字符串,智能处理PHP序列化数据,不修改主键值。

适合在迁移站点、更改域名或批量更新内容时使用,支持预演模式、导出SQL文件以及多站点网络替换。

参数列表

参数 说明
<old> 要在数据库中搜索的字符串。
<new> 将第一个字符串的实例替换为此新字符串。
[<table>...] 限制替换范围的数据库表列表。支持通配符,例如 'wp_*options''wp_post*'
--dry-run 运行整个搜索/替换操作并显示报告,但不保存对数据库的更改。
--network 在多站点安装中,在所有注册到 $wpdb 的表中搜索/替换。
--all-tables-with-prefix 对匹配表前缀的所有表启用替换,即使未注册到 $wpdb。
--all-tables 对数据库中所有表启用替换,无论前缀如何,即使未注册到 $wpdb。覆盖 –network 和 –all-tables-with-prefix。
--export[=<file>] 将转换后的数据写入 SQL 文件,而不是保存到数据库。如果未提供 ,则输出到 STDOUT。
--export_insert_size=<rows> 执行 SQL 导出时定义单条 INSERT 语句的行数。默认为 50。
--skip-tables=<tables> 不要在特定表上执行替换。使用逗号指定多个表。支持通配符,例如 'wp_*options''wp_post*'
--skip-columns=<columns> 不在特定列上执行替换。使用逗号指定多个列。
--include-columns=<columns> 在特定列上执行替换。使用逗号指定多个列。
--precise 强制使用 PHP(而不是 SQL),这更彻底但更慢。
--recurse-objects 启用递归进入对象以替换字符串。默认为 true;传递 –no-recurse-objects 以禁用。
--verbose 在更新时打印行到控制台。
--regex 使用正则表达式(无分隔符)运行搜索。警告:使用 –regex 时,search-replace 执行时间会延长约 15-20 倍。
--regex-flags=<regex-flags> 为正则表达式搜索替换传递 PCRE 修饰符(例如 ‘i’ 表示不区分大小写)。
--regex-delimiter=<regex-delimiter> 正则表达式的分隔符。如果出现在搜索字符串中,必须转义。默认值为 chr(1) 的结果。
--regex-limit=<regex-limit> 每行正则表达式的最大可能替换数(或每行每反序列化数据位)。默认为 -1(无限制)。
--format=<format> 以特定格式渲染输出。默认:table。选项:table、count。
--report 生成报告。默认为 true。
--report-changed-only 仅报告更改的字段。默认为 false,除非记录日志时,默认为 true。
--log[=<file>] 记录更改的项目。如果未提供 或为 “-“,则输出到 STDOUT。警告:会导致显著变慢,类似于或更差于启用 –precise 或 –regex。
--before_context=<num> 用于记录日志,在旧匹配和新替换之前显示的字符数。默认为 40。如果未记录日志则忽略。
--after_context=<num> 用于记录日志,在旧匹配和新替换之后显示的字符数。默认为 40。如果未记录日志则忽略。

常用示例

搜索替换但跳过一列

$ wp search-replace 'http://example.test' 'http://example.com' --skip-columns=guid

运行搜索替换操作但不保存到数据库

$ wp search-replace 'foo' 'bar' wp_posts wp_postmeta wp_terms --dry-run

运行不区分大小写的正则表达式搜索替换操作(慢)

$ wp search-replace '[foo id="([0-9]+)"' '[bar id="1"' --regex --regex-flags='i'

将生产多站点数据库转换为本地开发数据库

$ wp search-replace --url=example.com example.com example.test 'wp_*options' wp_blogs wp_site --network

搜索替换到 SQL 文件而不转换数据库

$ wp search-replace foo bar --export=database.sql

Bash 脚本:将生产环境 URL 替换为开发环境 URL(兼容多站点)

#!/bin/bash
if $(wp --url=http://example.com core is-installed --network); then
    wp search-replace --url=http://example.com 'http://example.com' 'http://example.test' --recurse-objects --network --skip-columns=guid --skip-tables=wp_users
else
    wp search-replace 'http://example.com' 'http://example.test' --recurse-objects --skip-columns=guid --skip-tables=wp_users
fi