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, а лише дивимося, де буде проведено заміну при “бойовому запуску”.

У моєму випадку такий звіт:

+-------------+-----------+--------------+------+
| Table | Column | Replacements | Тип |
+-------------+-----------+--------------+------+
| wp_13_posts | guid | 0 | PHP |
| wp_13_posts | post_type | 0 | PHP |
| wp_14_posts | guid | 3 | PHP |
| wp_14_posts | post_type | 3 | PHP |
| wp_15_posts | guid | 0 | PHP |
| wp_15_posts | post_type | 0 | PHP |
| wp_16_posts | guid | 0 | PHP |
| wp_16_posts | post_type | 0 | PHP |
| wp_17_posts | guid | 0 | PHP |
| wp_17_posts | post_type | 0 | PHP |
| wp_18_posts | guid | 0 | PHP |
| wp_18_posts | post_type | 0 | PHP |
| wp_19_posts | guid | 0 | PHP |
| wp_19_posts | post_type | 0 | PHP |
| wp_20_posts | guid | 0 | PHP |
| wp_20_posts | post_type | 0 | PHP |
| wp_21_posts | guid | 0 | PHP |
| wp_21_posts | post_type | 0 | PHP |
| wp_22_posts | guid | 0 | PHP |
| wp_22_posts | post_type | 0 | PHP |
| wp_23_posts | guid | 0 | PHP |
| wp_23_posts | post_type | 0 | PHP |
| wp_24_posts | guid | 0 | PHP |
| wp_24_posts | post_type | 0 | PHP |
| wp_25_posts | guid | 0 | PHP |
| wp_25_posts | post_type | 0 | PHP |
| wp_26_posts | guid | 0 | PHP |
| wp_26_posts | post_type | 0 | PHP |
| wp_27_posts | guid | 0 | PHP |
| wp_27_posts | post_type | 0 | PHP |
| wp_28_posts | guid | 0 | PHP |
| wp_28_posts | post_type | 0 | PHP |
| wp_4_posts | guid | 0 | PHP |
| wp_4_posts | post_type | 0 | PHP |
| wp_posts | guid | 0 | PHP |
| wp_posts | post_type | 0 | PHP |
+-------------+-----------+--------------+------+
Success: 6 replacements to be made.

Якщо знайдені потенційні заміни вас влаштовують, можна запустити команду в “бойовому” режимі, прибравши з команди опцію --dry-run.

Початковий код команди

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *