wp search-replace
Пошук/заміна рядків у базі даних.
Виконує пошук по всіх рядках у вибраних таблицях та замінює входження першого рядка на другий рядок.
За промовчанням команда використовує таблиці, зареєстровані в об’єкті $wpdb . На multisite це будуть лише таблиці для поточного сайту, якщо не вказано параметр -network .
Пошук/заміна інтелектуально обробляє серіалізовані дані PHP та не змінює значення первинного ключа.
Також дивіться команди для роботи з БД wp db .
Використання
wp search-replace {old} {new} [{table}...] [--dry-run] [--network] [--all-tables-with-prefix] [--all-tables] [- -export[={file}]] [--export_insert_size={rows}] [--skip-tables={tables}] [--skip-columns={columns}] [--include-columns={columns} ] [--precise] [--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 . - [–export[={file}]]
-
Записати перетворені дані в SQL файл, не зберігати зміни до БД. Якщо
{file} не вказано, виводиться стандартний висновок (STDOUT). - [–export_insert_size={rows}]
-
Визначає кількість рядків в одному операторі INSERT під час експорту SQL. Можливо, цей параметр потрібно змінити, якщо цього вимагає конфігурація бази даних (наприклад, якщо вам потрібно зробити менше запитів).
Типово: 50
- [–skip-tables={tables}]
- Не виконувати заміну у зазначених таблицях. Використовуйте коми для вказівки кількох таблиць.
- [–skip-columns={columns}]
- Не виконуйте заміну у вказаних колонках таблиць. Використовуйте коми для вказівки кількох стовпців.
- [–include-columns={columns}]
- Виконувати заміну для певних стовпців. Використовуйте коми для вказівки кількох стовпців.
- [–precise]
- Примусове використання PHP варіанта запиту (замість SQL). PHP є точнішим, але при цьому повільнішим.
- [–recurse-objects]
-
Включити рекурсію до об’єктів для заміни рядків. Вкажіть
–no-recurse-objects для вимкнення.Типово: true
- [–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 | Тип | +--------------------+-----------------+---------- ----+------+ | 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
.