wp search-replace în WordPress

Caută și înlocuiește un text în toată baza de date WordPress, inclusiv în datele PHP serializate.

Sintaxă
wp search-replace <old> <new> [<table>...] [--dry-run] [--skip-columns=<columns>] [--all-tables] [--precise]

Ce face wp search-replace

wp search-replace parcurge rândurile din tabelele site-ului și înlocuiește un șir de caractere cu altul. Cel mai des se folosește la mutarea unui site: de pe http://exemplu.test (local) pe https://exemplu.ro (producție) sau invers.

Spre deosebire de un simplu UPDATE ... REPLACE() în SQL, comanda tratează corect datele PHP serializate (în care lungimea fiecărui text e salvată lângă el) și nu modifică cheile primare. Implicit lucrează doar pe tabelele înregistrate în $wpdb; tabelele fără cheie primară sunt sărite.

La final afișează un raport cu tabelul, coloana, numărul de înlocuiri și metoda folosită (SQL pentru coloane simple, PHP pentru coloane cu date serializate), urmat de un mesaj Success. Rulează întâi cu --dry-run, care arată ce s-ar schimba fără să salveze nimic, și fă un export al bazei de date înainte.

Parametri

Parametru Descriere
<old> Textul căutat.
<new> Textul cu care se înlocuiește.
<table>... Limitează înlocuirea la anumite tabele; acceptă metacaractere, de exemplu 'wp_post*'.
--dry-run Face toată căutarea și afișează raportul, dar nu salvează modificările.
--skip-columns=<columns> Coloane sărite, separate prin virgulă (de exemplu guid). Acceptă și forma tabel.coloana.
--skip-tables=<tables> Tabele sărite, separate prin virgulă; acceptă metacaractere.
--all-tables-with-prefix Include toate tabelele cu prefixul site-ului, chiar dacă nu sunt înregistrate în $wpdb (de exemplu tabelele unor pluginuri).
--all-tables Include TOATE tabelele din baza de date, indiferent de prefix.
--network Pe multisite: toate tabelele rețelei, nu doar ale site-ului curent.
--export[=<file>] Scrie datele transformate într-un fișier SQL în loc să modifice baza de date (fără nume de fișier, scrie în STDOUT).
--precise Folosește PHP pentru toate coloanele: mai lent, dar mai sigur la date serializate complicate.
--regex Tratează <old> ca expresie regulată (fără delimitatori); documentația avertizează că e de circa 15-20 de ori mai lent. Modificatorii se dau cu --regex-flags, de exemplu i.
--format=<format> table (implicit) sau count, care afișează doar numărul total de înlocuiri.
--report-changed-only Arată în raport doar coloanele în care s-a înlocuit ceva.

Exemple

Exemplul 1: Verificarea înainte de mutare, cu –dry-run

Cu --format=count vezi doar câte înlocuiri s-ar face. Coloana guid se sare, pentru că identifică articolele și nu trebuie schimbată.

wp search-replace 'http://exemplu.test' 'https://exemplu.ro' --skip-columns=guid --dry-run --format=count

Ieșire în terminal

54

Exemplul 2: Mutarea reală pe domeniul de producție

--report-changed-only scurtează raportul la coloanele modificate. În wp_options și wp_postmeta apar date serializate, de aceea metoda e PHP.

wp search-replace 'http://exemplu.test' 'https://exemplu.ro' --skip-columns=guid --report-changed-only

Ieșire în terminal

+-------------+--------------+--------------+------+
| Table       | Column       | Replacements | Type |
+-------------+--------------+--------------+------+
| wp_options  | option_value | 4            | PHP  |
| wp_postmeta | meta_value   | 12           | PHP  |
| wp_posts    | post_content | 37           | SQL  |
| wp_posts    | post_excerpt | 1            | SQL  |
+-------------+--------------+--------------+------+
Success: Made 54 replacements.

Exemplul 3: Corectarea unui text doar în tabelul de articole

Numele tabelului după cele două texte limitează căutarea. Cu --dry-run mesajul final spune câte înlocuiri s-ar face.

wp search-replace 'Iasi' 'Iași' wp_posts --dry-run --report-changed-only

Ieșire în terminal

+----------+--------------+--------------+------+
| Table    | Column       | Replacements | Type |
+----------+--------------+--------------+------+
| wp_posts | post_content | 8            | SQL  |
| wp_posts | post_title   | 3            | SQL  |
+----------+--------------+--------------+------+
Success: 11 replacements to be made.

Greșeli frecvente

  • Rularea fără export al bazei de date: înlocuirea nu are „undo”. Rulează întâi wp db export și --dry-run.
  • Înlocuirea unui text prea scurt sau prea general (de exemplu exemplu în loc de http://exemplu.test): se schimbă și apariții pe care nu voiai să le atingi, cum ar fi adrese de e-mail.
  • Modificarea coloanei guid la mutarea unui site existent: cititoarele RSS pot crede că toate articolele sunt noi. Adaugă --skip-columns=guid.
  • Uitarea cache-ului: dacă site-ul are un cache persistent de obiecte (Redis, Memcached), WP-CLI îți amintește în mesajul final să rulezi wp cache flush, altfel pot apărea în continuare valorile vechi.

Comenzi înrudite

  • wp db export: Salvează baza de date a site-ului într-un fișier .sql, folosind datele de conectare din wp-config.php.
  • wp db import: Încarcă un fișier .sql în baza de date a site-ului, cu datele de conectare din wp-config.php.
  • wp cache flush: Golește cache-ul de obiecte WordPress (Object Cache), de exemplu după o modificare directă în baza de date.
  • wp option get / update: Citește, modifică și listează opțiunile WordPress din tabelul wp_options direct din terminal.