Ce Interogare SQL să folosesc pentru o simplă căutare și înlocuire
Ori de câte ori creez un site web nou, mai întâi creez un site de test pe un subdomeniu de tipul "stage.domain-name.com".
După ce totul funcționează corect, export baza de date, o deschid în notepad++ și fac o căutare/înlocuire pentru "subdomain.domain-name.com" și o înlocuiesc cu "domain-name.com"... în final o import într-o nouă bază de date pentru site-ul live.
Întrebarea mea este... ce interogare SQL ar trebui să rulez dacă aș dori să fac această simplă căutare/înlocuire în întreaga bază de date folosind phpMyAdmin?
-CH

Cele mai bune opțiuni pentru actualizarea opțiunilor, articolelor, conținutului articolelor și metadatelor articolelor:
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
De asemenea, consultați Căutarea datelor folosind phpMyAdmin și MySQL | Packt Publishing. Și Search RegEx este un bun plugin WordPress care permite căutarea și înlocuirea cu Grep în toate articolele și paginile.
Actualizare 16.06.2015: Folosirea instrumentului menționat în propoziția următoare este mult mai bună, deoarece o simplă căutare/înlocuire ca mai sus într-un dump al bazei de date va deteriora datele serializate. Consultați interconnectit.com WordPress Serialized PHP Search Replace Tool. În acest fel, nu veți deteriora datele serializate și nu va fi nevoie să rulați RegEx pe conținutul articolelor, deoarece scriptul interconnect schimbă URL-urile peste tot. Folosesc acest instrument tot timpul pentru a migra site-uri pe diferite domenii sau pentru a face o modificare globală de la http la https pentru a forța SSL fără plugin-uri și a schimba toate URL-urile din conținut pentru a preveni erorile de elemente nesecurizate.
Editare 02.09.21 WP CLI este, de asemenea, un instrument excelent și gestionează corect datele serializate. Consultați https://developer.wordpress.org/cli/commands/search-replace/

Nu schimba niciodată guid-ul - chiar dacă treci la un nou domeniu. Este folosit pentru a identifica în mod unic postarea, deoarece ID-ul se poate schimba dacă postările sunt exportate/importate într-o nouă bază de date. Printre altele, cititoarele RSS folosesc GUID-ul pentru a determina dacă un anumit articol a fost citit sau nu. Schimbarea guid-ului va determina republicarea tuturor articolelor tale.

Dacă schimbi domeniile, pur și simplu nu ai de ales și trebuie să modifici GUID-urile. Pierderea cititorilor RSS este un preț minim de plătit.

Chiar dacă GUID-urile conțin un URL, ele nu sunt folosite pentru a crea linkuri (de exemplu în meniuri) atunci când se fac referiri la postări. Prin urmare, a nu le schimba este perfect acceptabil.

Tabelul în care este salvat URL-ul tău este wp_options. Ar trebui să faci o actualizare pe coloanele care folosesc URL-ul pentru site-ul tău:
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"
S-ar putea să fi omis unele valori, dar de fiecare dată când faci acest proces de înlocuire din nou, poți observa valorile și tabelele care ar trebui actualizate și să le adaugi în acest script.
WordPress Codex are un ghid util despre cum să schimbi URL-ul unui site, poate acesta este chiar mai potrivit pentru tine: Schimbarea URL-ului Site-ului

Nu există o metodă de a face înlocuire în întreaga bază de date? Cu alte cuvinte... am observat, de exemplu, că trebuie să înlocuiesc URL-urile în mai multe locații diferite, inclusiv în biblioteca de media... Dacă ar exista o funcție de căutare/înlocuire pentru întreaga bază de date, practic pentru fiecare câmp, aceasta ar rezolva problema. Mulțumesc pentru ajutor.

Verifică noul link pe care l-am adăugat în răspuns. Cred că asta ar fi soluția.

Acesta este un script excelent pe care îl folosesc și funcționează perfect cu tablourile serializate pe care WordPress le utilizează pentru a stoca opțiunile. Asigurați-vă că îl ștergeți de pe serverul dumneavoastră la distanță când ați terminat, deoarece reprezintă un RISC mare de securitate.
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

Pentru asta folosesc WP-CLI deoarece îl consider cel mai ușor și se ocupă de datele serializate.
wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid
Există și o opțiune care scrie modificările într-un fișier SQL în loc să manipuleze direct baza de date:
wp search-replace foo bar --export=database.sql

nu trebuie să faci asta, poți folosi căi relative.
când legi ceva în loc de subdomeniu.site.com/imag.jpg - folosește /imag.jpg de exemplu
în felul acesta nu vei întâmpina problema de la început.
altfel pentru o instrucțiune mysql update poți folosi
update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);

Mulțumesc... da, voi face asta data viitoare. Instrucțiunea SQL efectuează o înlocuire în întreaga bază de date (inclusiv toate tabelele)?

@NetConstructor.com Instrucțiunea SQL pe care ți-a furnizat-o mireille mai sus este comanda generică MySQL pentru înlocuirea unui șir de caractere într-un câmp specific dintr-un tabel specific. Dacă ai încerca să rulezi această instrucțiune exact așa cum a fost scrisă, nu ar funcționa. Pentru ca această comandă să funcționeze, ar trebui să modifici TABLE_NAME & FIELD_NAME cu un câmp și tabel real utilizate de WordPress.

De asemenea, reține că chiar dacă dorești să utilizezi căi relative, multe părți din WordPress au tendința de a insera automat căi absolute. Pentru a obține acest lucru, un plugin precum: https://wordpress.org/plugins/root-relative-urls/ este foarte, foarte util

Pentru a schimba domeniul WordPress, ceea ce avem adesea nevoie, poate fi pentru a face site-ul live de pe localhost: Aceasta este o listă completă de interogări de actualizare:
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
- Trebuie să adăugăm și alte tabele care nu sunt implicite în WP dacă este necesar.
ACTUALIZARE: Search Replace DB versiunea 3.1.0 este un instrument prietenos pentru dezvoltatori, care vă permite să efectuați căutări/înlocuiri în întreaga bază de date, fără a deteriora șirurile sau obiectele PHP serializate.

De fapt, nu este nevoie să folosești o interogare SQL, ci doar câteva ajustări în fișierele wp_config.php și functions.php din tema ta. Verifică acest subiect în Wordpress Codex: https://codex.wordpress.org/Changing_The_Site_URL
