wp search-replace
Поиск/замена строк в базе данных.
Выполняет поиск по всем строкам в выбранных таблицах и заменяет вхождение первой строки на вторую строку.
По умолчанию команда использует таблицы, зарегистрированные в объекте $wpdb. На multisite это будут только таблицы для текущего сайта, если не указан параметр --network.
Сериализованные данные
Поиск/замена интеллектуально обрабатывает сериализованные данные PHP и НЕ изменяет значения первичного ключа.
Смотрите также команды для работы с БД wp db.
Исходный код команды
Использование
wp search-replace {old} {new} [{table}...] [--dry-run] [--network] [--all-tables-with-prefix] [--all-tables] [--skip-tables={tables}] [--include-columns={columns}] [--skip-columns={columns}] [--export[={file}]] [--export_insert_size={rows}] [--precise] [--recurse-objects] [--no-recurse-objects] [--verbose] [--regex] [--regex-flags={regex-flags}] [--regex-delimiter={regex-delimiter}] [--regex-limit={regex-limit}] [--format={format}] [--report] [--report-changed-only] [--log[={file}]] [--before_context={num}] [--after_context={num}]
Можно указать Глобальные параметры и следующие:
- {old}
- Строка для поиска в базе данных.
- {new}
- Строка на которую нужно заменить найденную строку.
- [{table}...]
- Список таблиц базы данных в которых нужно проводить поиск. Поддерживаются подстановочные знаки, например 'wp_*options' или 'wp_post*'.
- [--dry-run]
- Выполнить всю операцию поиска/замены и показать отчет, но реально не производить замену в базе данных.
- [--network]
- Поиск/замена по всем таблицам, зарегистрированным в $wpdb в multisite установке.
- [--all-tables-with-prefix]
- Включите замену для любых таблиц, соответствующих префиксу таблиц, даже если они не зарегистрированы в $wpdb.
- [--all-tables]
- Включите замену для всех таблиц в базе данных, независимо от префикса, и их регистрации в $wpdb. Переписывает опции --network и --all-tables-with-prefix.
- [--skip-tables={tables}]
- Не выполнять замену в указанных таблицах. Используйте запятые для указания нескольких таблиц.
- [--include-columns={columns}]
- Выполнять замену для определенных столбцов. Используйте запятые для указания нескольких столбцов.
- [--skip-columns={columns}]
- Не выполняйте замену в указанных колонках таблиц. Используйте запятые для указания нескольких столбцов.
- [--export[={file}]]
- Записать преобразованные данные в SQL файл, не сохранять изменения в БД. Если {file} не указан, выводится в стандартный вывод (STDOUT).
- [--export_insert_size={rows}]
- Определяет количество строк в одном операторе INSERT при выполнении экспорта SQL. Возможно этот параметр нужно изменить если того требует конфигурация базы данных (например, если вам нужно сделать меньше запросов).
По умолчанию: 50 - [--precise]
- Принудительное использование PHP варианта запроса (вместо SQL). PHP является более точным, но при этом более медленным.
- [--recurse-objects]
- Включить рекурсию в объекты для замены строк.
По умолчанию: true - [--no-recurse-objects]
- Отключить рекурсию в объекты для замены строк.
По умолчанию: false - [--verbose]
- Выводит строки в консоль по мере их обновления.
- [--regex]
- Выполняет поиск с помощью регулярного выражения (без разделителей).
Заметка: с --regex работает в 15-20 раз медленнее. - [--regex-flags={regex-flags}]
- Модификаторы PCRE для --regex (например, 'i' для нечувствительности к регистру).
- [--regex-delimiter={regex-delimiter}]
- Разделитель, используемый для регулярного выражения. Он должен быть экранирован, если он появляется в строке regex.
По умолчанию: результат chr(1) - [--regex-limit={regex-limit}]
- Максимальное количество возможных замен для регулярного выражения. При десериализации влияет на каждое значение строки массива.
По умолчанию: -1 (без ограничений) - [--format={format}]
- Формат вывода результата. Может быть:
table
,count
.
По умолчанию: table - [--report]
- Составить отчет.
По умолчанию: true - [--report-changed-only]
- Отчитаться только по измененным полям.
По умолчанию: false (если включено логирование то true) - [--log[={file}]]
- Файл для записи логов. Если {file} не указан или в нем указано
-
, то выводится в STDOUT.
Заметка: замедляет работу, аналогично или хуже включению --precise или `--regex'. - [--before_context={num}]
- Сколько символов выводить перед старым совпадением и новой заменой. Игнорируется, если лог отключен.
По умолчанию: 40 - [--after_context={num}]
- Сколько символов выводить после старого совпадения и новой заменой. Игнорируется, если лог отключен.
По умолчанию: 40
Примеры
ВАЖНО! На некоторых серверах (в частности на windows) нужно использовать двойные кавычки ("
а не '
) для оформления поисковых фраз. Фразы также можно использовать без обрамления в кавычки, поэтому если в искомых фразах нет пробелов, то не используйте кавычки!
# Поиск и замена, но пропуск одного столбца $ wp search-replace 'http://example.dev' '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.dev 'wp_*options' wp_blogs
# Поиск/замена в SQL-файл без изменения базы данных $ wp search-replace foo bar --export=database.sql
# Bash script: Search/replace production to development url (multisite compatible) #!/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.dev' --recurse-objects --network --skip-columns=guid --skip-tables=wp_users else wp search-replace 'http://example.com' 'http://example.dev' --recurse-objects --skip-columns=guid --skip-tables=wp_users fi
WP CLI поиск и замена URL для WordPress multisite
wp search-replace example.com newexample.com --precise --network
Отобразим только замененные данные — параметр --report-changed-only=true
$ wp search-replace 'заменить с' 'заменить на' --report-changed-only=true +--------------------+-----------------+--------------+------+ | Table | Column | Replacements | Type | +--------------------+-----------------+--------------+------+ | wp_comments | comment_content | 3 | SQL | | wp_posts | post_content | 5 | SQL | | wp_posts_revisions | post_content | 30 | SQL | +--------------------+-----------------+--------------+------+ Success: Made 38 replacements. Please remember to flush your persistent object cache with `wp cache flush`.
Замена типа записи в Мультисайте
Имеется тип записи "Блог" (blog), который было решено переименовать в "Новости" (news). Помимо возможных исправлений в шаблонах, хотелось бы также поменять данные и в базе, так как при смене ключа ctp старые записи перестанут отображаться в админке и на сайте.
Не забудьте сделать бэкап базы данных (wp db export)!
Сделать это достаточно легко:
wp search-replace blog news wp_*posts --include-columns=guid,post_type --precise --network --dry-run
Данной командой мы:
- Пробегаемся по таблицам с записями всех сайтов;
- Ищем там фразу "blog" только в колонках guid и post_type;
- Делаем это с помощью PHP (необязательно) - медленнее, но точнее;
- Не заменяем blog на news, а лишь смотрим, где будет проведена замена при "боевом запуске".
В моем случае такой отчёт:
Если найденные потенциальные замены вас устраивают, то можно запустить команду в "боевом" режиме, убрав из команды опцию --dry-run
.
Камена и экспорт в БД дамп
wp search-replace //old.com //new.com --export | gzip > ./db_backup-$(date +%Y-%m-%d-%H%M%S).sql.gz
Получим архив с содержимым: