Cum să schimbi toate GUID-urile din tabela posts?
Pentru a îmbunătăți răspunsurile anterioare, ar trebui să actualizezi toate tabelele relevante, cum ar fi (prefixul tabelului aici este wp_):
UPDATE `wp_posts` SET guid = REPLACE(guid, 'oldsiteurl', 'newsiteurl') WHERE guid LIKE 'oldsiteurl%';
UPDATE `wp_postmeta` SET meta_value = REPLACE(meta_value, 'oldsiteurl', 'newsiteurl') WHERE meta_value LIKE 'oldsiteurl%';
UPDATE `wp_options` SET option_value = REPLACE(option_value, 'oldsiteurl', 'newsiteurl') WHERE option_value LIKE 'oldsiteurl%';
Dacă ai orice plugin-uri care fac redirecționări, ar trebui să modifici și permalink-urile acolo:
UPDATE `wp_redirection_404` SET url = REPLACE(url, 'oldsiteurl', 'newsiteurl') WHERE url LIKE 'oldsiteurl%';

fii extrem de atent când înlocuiești în tabelele wp_postmeta
și wp_options
.. de multe ori există date serializate stocate în aceste tabele, dacă "oldsiteurl" și "newsiteurl" au lungimi diferite, vei corupe aceste câmpuri.

Da @farinspace perfect de acord, niciodată să nu faci o actualizare automată pe wp_postmeta și wp_options, va trebui să actualizezi aceste tabele manual și, dacă este cazul, să editezi șirurile serializate cu un editor adecvat https://serializededitor.com/

Folosește WP-CLI pentru a căuta și înlocui. Plugin-ul MigrateDB are de asemenea o funcționalitate de căutare și înlocuire la export pentru următoarea tranziție.

Am uitat că am scris acum câțiva ani un generator SQL pentru exact această sarcină:
https://farinspace.github.io/wp-migrate-gen/
În esență, SQL-ul relevant este următorul:
UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, 'a', 'b') WHERE `option_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, 'a', 'b');
UPDATE `wp_posts` SET `post_excerpt` = REPLACE(`post_excerpt`, 'a', 'b');
UPDATE `wp_posts` SET `guid` = REPLACE(`guid`, 'a', 'b');
UPDATE `wp_comments` SET `comment_author_url` = REPLACE(`comment_author_url`, 'a', 'b');
UPDATE `wp_comments` SET `comment_content` = REPLACE(`comment_content`, 'a', 'b');
UPDATE `wp_links` SET `link_url` = REPLACE(`link_url`, 'a', 'b');
UPDATE `wp_postmeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_usermeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_termmeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
UPDATE `wp_commentmeta` SET `meta_value` = REPLACE(`meta_value`, 'a', 'b') WHERE `meta_value` NOT REGEXP '^([adObis]:|N;)';
Interogările de mai sus vor verifica și vor sări peste datele serializate PHP.
Folosind generatorul, puteți dezactiva opțiunea "sări peste date serializate" dacă lungimile vechiului și noului șir de caractere se potrivesc.
ATENȚIE: Vă recomand să creați întotdeauna o copie de rezervă a datelor dvs. înainte de a rula orice interogări care adaugă/șterg/actualizează conținut.

Documentația WordPress avertizează despre modificarea intrărilor guid în baza de date WP: "Este esențial să NU modificați conținutul acestui câmp."
https://wordpress.org/support/article/changing-the-site-url/#important-guid-note

Dar când domeniul anterior era localhost
, litera U din GUID nu prea se potrivește. :)

După cum este menționat în documentația WordPress, atunci când GUID-ul este folosit, de exemplu, de cititoarele de fluxuri pentru a identifica conținutul unic, tot nu contează ce domeniu este în GUID. Nu ar trebui să îl schimbați decât dacă doriți ca cititoarele de fluxuri să evalueze toate GUID-urile modificate ca fiind 'noi'. Dar când treceți de la 'localhost' la un alt domeniu, probabil că cititoarele de fluxuri nu sunt principala voastră preocupare... ;-)

După cum ai menționat, există câteva variabile care trebuie schimbate pentru a actualiza la noul URL pe site-ul tău WordPress.
- Accesează și descarcă Scriptul de Căutare și Înlocuire în Baza de Date de la Interconnect IT aici
- Dezarhivează fișierul și plasează folderul pe serverul live unde este instalat WordPress (în rădăcină) și redenumește folderul în
replace
(captură de ecran) - Navighează în browser la noul folder creat (ex:
http://web.site/replace
) și vei vedea instrumentul de căutare/înlocuire - Până în acest punct ar trebui să fie destul de intuitiv: introdu vechiul URL în câmpul
search for…
și noul URL în câmpulreplace with…
Poți apăsa butonul dry run (testare fără modificări) sub secțiunea actions pentru a vedea ce va fi înlocuit înainte de a executa scriptul. După ce ai terminat, asigură-te că ștergi folderul /replace/
.

Migrez în mod obișnuit site-uri WordPress și acesta este procesul pe care îl folosesc.
Dacă cineva este interesat, fac două înlocuiri prin căutare. Prima rulare este pentru a înlocui toate domeniile vechi cu cele noi. A doua este pentru a impune SSL.
- Înlocuiește
olddomain.com
cunewdomain.com
- Activează regex, înlocuiește
https?:\/\/([\w-]*\.|)newdomain\.com
cuhttps://$1newdomain.com
. Această expresie regulată va suporta subdomenii.
Ca întotdeauna, rulează mai întâi un test și verifică câteva dintre rezultate.
