
🔄 Jak zastąpić stary domen nowym przez phpMyAdmin: poradnik dla WordPress
Przenieśli Państwo stronę na nową domenę i leży. Albo otwiera się, ale bez stylów. Albo panel administracyjny nie wpuszcza. Każdy, kto ręcznie przenosił WordPress, przechodził przez ten moment: baza danych wciąż pamięta stary URL, a strona konwulsyjnie próbuje załadować zasoby z adresu, którego już nie ma.
Cztery zapytania SQL w phpMyAdmin rozwiązują problem w pięć minut. Bez wtyczek, bez WP-CLI, bez paniki. Poniżej instrukcja krok po kroku od znalezienia bieżącej domeny do końcowego sprawdzenia. Z uwzględnieniem niestandardowego prefiksu tabel, HTTPS i danych serializowanych.
💡 Szybki przegląd:
- Znajdują Państwo bieżącą domenę w tabeli wp_options: pola siteurl i home
- Wykonują Państwo cztery zapytania UPDATE w zakładce SQL phpMyAdmin
- Resetują Państwo hasło administratora przez wp_users, jeśli panel administracyjny nie wpuszcza
- Zapisują Państwo bezpośrednie odnośniki w ustawieniach WordPress, aby przywrócić style
- Dla sklepów i multisite używają Państwo Better Search Replace lub WP-CLI: zwykłe REPLACE psuje serializowane tablice
Od czego zacząć: proszę sprawdzić bieżącą domenę w bazie
Przed zamianą proszę się upewnić, jaka domena jest obecnie wpisana w stronie. Zaoszczędzi to czas, jeśli strona była już wcześniej przenoszona i w bazie mógł pozostać trzeci, „pośredni" URL.
Proszę otworzyć phpMyAdmin, wybrać bazę danych strony i znaleźć tabelę wp_options. W niej znajdują się dwa wiersze: siteurl (adres WordPress) i home (adres strony). To właśnie ich wartości będziemy zmieniać w pierwszej kolejności.

Jeśli prefiks tabel jest niestandardowy, na przykład mysite_ zamiast wp_, proszę szukać tabeli mysite_options. Prefiks można sprawdzić w pliku wp-config.php: zmienna $table_prefix.
Cztery zapytania SQL do pełnej zamiany domeny
Każde zapytanie proszę wykonywać po kolei w zakładce „SQL" phpMyAdmin. Przed uruchomieniem proszę koniecznie zrobić kopię zapasową bazy: eksport przez ten sam phpMyAdmin zajmuje minutę i ratuje przed nieodwracalnymi błędami.
Proszę zmienić http://www.oldurl na http://www.newurl we wszystkich zapytaniach poniżej. Jeśli strona działa przez HTTPS, proszę użyć https:// w obu adresach.
1. Aktualizacja HOME i SITEURL
Zmienia dwa kluczowe adresy w wp_options. Bez tego kroku strona po prostu nie otworzy się pod nową domeną, WordPress będzie próbował przekierować na starą.
1 UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldurl', 'http://www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';
2. Aktualizacja GUID wpisów
Pole guid w wp_posts przechowuje stały identyfikator każdego wpisu. Dla działania strony jego zamiana nie jest krytyczna, WordPress nie używa GUID do routingu. Jeśli jednak strona jest czytana przez czytniki RSS, czystość GUID ma znaczenie: stare URLe w kanale będą prowadzić do uszkodzonych odnośników.
1 UPDATE wp_posts SET guid = replace(guid, 'http://www.oldurl', 'http://www.newurl');
3. Aktualizacja treści wpisów
Najobszerniejsze zapytanie. post_content zawiera tekst wszystkich stron i postów, w tym osadzone obrazy i wewnętrzne odnośniki. Po wykonaniu wszystkie obrazki w treści zaczynają się ładować z nowej domeny.
1 UPDATE wp_posts SET post_content = replace(post_content, 'http://www.oldurl', 'http://www.newurl');
4. Aktualizacja meta pól
Pola niestandardowe, ustawienia wtyczek, dane motywów, wszystko to leży w wp_postmeta. Jeśli pominą Państwo to zapytanie, otrzymają Państwo uszkodzone odnośniki w pozornie nieoczekiwanych miejscach: logo w stopce, tło w customizerze, URL we wtyczce SEO.
1 UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://www.oldurl', 'http://www.newurl');
Po wykonaniu wszystkich czterech proszę otworzyć stronę pod nową domeną. Jeśli wszystko zostało zrobione poprawnie, nie powinno być problemów. Ale zdarza się co innego: błąd „Error establishing a database connection" lub strona otwiera się bez stylów.

Pierwsze, co jest potrzebne w takiej sytuacji, to dostęp do panelu administracyjnego.
Jak dostać się do panelu administracyjnego, jeśli hasło zostało utracone lub strona nie wpuszcza
Zleceniodawca nie zostawił hasła. Albo zablokowali się Państwo zmianą domeny i /wp-admin wyrzuca w nieskończone przekierowanie. Oto dwa sposoby na uzyskanie uprawnień administratora bezpośrednio przez bazę danych.
Resetowanie hasła administratora przez phpMyAdmin
Proszę otworzyć tabelę wp_users, u Państwa prefiks może się różnić (mysite_users itp.). Proszę znaleźć użytkownika z uprawnieniami administratora i kliknąć „Edytuj":

W wierszu user_pass proszę wybrać z rozwijanej listy funkcję MD5 i wprowadzić nowe hasło w sąsiednim polu. Proszę kliknąć „Wykonaj":

Proszę zwrócić uwagę: współczesny WordPress używa phpass (hashy bcrypt), a nie MD5. Jednak podczas wprowadzania hasła WordPress sprawdza hash według łańcucha: jeśli weryfikacja bcrypt się nie powiedzie, próbuje fallbacku MD5 i natychmiast ponownie haszuje hasło do aktualnego formatu. Dlatego MD5 przez phpMyAdmin działa jako tymczasowy klucz.
Tworzenie administratora przez PHP
Alternatywny sposób: dodać nowego użytkownika-administratora programowo. Kod wstawia się do functions.php aktywnego motywu lub przez wtyczkę MU.
Proszę dodać do functions.php motywu potomnego:
1 function sdstudio_add_admin_user() { 2 $userdata = array( 3 'user_login' => 'tempadmin', 4 'user_pass' => 'TempPass123!', 5 'user_email' => '[email protected]', 6 'role' => 'administrator', 7 ); 8 wp_insert_user( $userdata ); 9 } 10 add_action( 'init', 'sdstudio_add_admin_user' );
Funkcja wp_insert_user() tworzy użytkownika z przekazanymi parametrami, a hak init uruchamia się podczas każdego żądania do WordPressa. Wystarczy raz otworzyć dowolną stronę witryny, a użytkownik zostanie utworzony.
Po zalogowaniu się do panelu administracyjnego należy koniecznie usunąć zarówno funkcję z functions.php, jak i utworzonego tymczasowego użytkownika. Pozostawienie tempadmin z hasłem w jawnej postaci to dziura w zabezpieczeniach.
Naprawa uszkodzonych obrazów i stylów po zmianie domeny
Dostęp do panelu administracyjnego jest, ale obrazy się nie ładują, a układ strony się rozjechał. W dziewięciu przypadkach na dziesięć pomaga jedna prosta operacja.
Proszę przejść do „Ustawienia" → „Bezpośrednie odnośniki":

Proszę niczego nie zmieniać, tylko kliknąć „Zapisz zmiany":

WordPress przebuduje strukturę URL, zaktualizuje cache reguł przepisywania i zresetuje wewnętrzny cache przekierowań. Po tym obrazy zazwyczaj wracają na swoje miejsce.
Jeśli to nie pomogło, oznacza to, że stara domena jest zaszyta w tablicach serializowanych. Zwykłe REPLACE w SQL je psuje: długość ciągu w tablicy serializowanej jest na sztywno zapisana liczbą, a zamiana „stary-długi.ru" na „nowy-krótki.io" zmienia tę długość, przez co tablica przestaje być czytelna. Proszę zainstalować bezpłatną wtyczkę Better Search Replace, która poprawnie obsługuje serializację i przed zamianą pokazuje, ile dopasowań znaleziono w każdej tabeli.
Dla witryn z WP-CLI jest jeszcze prościej, jedno polecenie:
1 wp search-replace 'http://olddomain.ru' 'https://newdomain.io' --all-tables --dry-run
Flaga --dry-run najpierw pokaże, co zostanie zastąpione, nie wprowadzając zmian. Po upewnieniu się proszę uruchomić polecenie bez niej. WP-CLI search-replace również potrafi pracować z danymi serializowanymi i robi to szybciej niż interfejs webowy.
Na poniższym filmie znajduje się poglądowa demonstracja całego procesu od wejścia do phpMyAdmin po sprawdzenie witryny po zamianie:
⁉️🤔 Często zadawane pytania
Czy koniecznie trzeba używać phpMyAdmin do zmiany domeny?
Nie. Jeśli strona nie została jeszcze przeniesiona, Duplicator lub All-in-One WP Migration wykonują zamianę automatycznie podczas wdrażania. Jeśli strona już leży na nowym hostingu bez dostępu do panelu administracyjnego, pozostają zapytania SQL przez phpMyAdmin, Adminer lub WP-CLI. Dla większości webmasterów phpMyAdmin to najbardziej bezpośrednia i kontrolowana metoda: widzą Państwo każdą operację, zamiast ufać czarnej skrzynce wtyczki.
Co zrobić, jeśli prefiks tabel nie brzmi wp_?
Proszę sprawdzić w pliku
wp-config.phpwartość stałej$table_prefix. Zazwyczaj jest towp_, ale hostingodawcy lub wtyczki bezpieczeństwa, takie jak Solid Security (dawniej iThemes Security), czasami zmieniają go na losowy. We wszystkich powyższych zapytaniach proszę zastąpićwp_swoim prefiksem, na przykładxyz123_optionszamiastwp_options.
Dlaczego strona otwiera się bez stylów po zamianie?
Stara domena pozostała w ustawieniach motywu, pamięci podręcznej lub CDN. Proszę zresetować bezpośrednie odnośniki (instrukcja powyżej), wyczyścić pamięć podręczną wtyczki cache. Jeśli korzystają Państwo z Cloudflare lub innego CDN, proszę unieważnić pamięć podręczną po stronie dostawcy. Jeśli to nie pomoże, proszę uruchomić Better Search Replace: najprawdopodobniej stary URL jest zaszyty w zserializowanej tablicy
theme_mods_*.
Strona jest na HTTPS, a po przeprowadzce certyfikat nie działa, co robić?
Proszę upewnić się, że we wszystkich zapytaniach używali Państwo
https://, a niehttp://. Proszę sprawdzić, czy w ustawieniach WordPress po zalogowaniu do panelu administracyjnego oba adresy zaczynają się odhttps://. Sam certyfikat SSL konfiguruje się po stronie hostingu, przez panel sterowania lub darmowy Let's Encrypt. To osobna procedura, niezwiązana z bazą danych.
Czy można zmienić domenę bez dostępu do phpMyAdmin?
Tak. WP-CLI:
wp search-replace 'http://olddomain' 'http://newdomain' --all-tables. Tylko FTP: proszę dodać wwp-config.phpliniedefine('WP_HOME','http://newdomain');orazdefine('WP_SITEURL','http://newdomain');, to tymczasowo nadpisze adresy i zapewni dostęp do panelu administracyjnego. Po zalogowaniu proszę usunąć te linie i zapisać ustawienia przez interfejs.
Czy trzeba zmieniać GUID w wp_posts, czy można pominąć?
Do działania strony nie jest to potrzebne. WordPress nie używa GUID do routingu, tylko do identyfikacji wpisów w kanałach RSS. Jeśli strona jest aktywnie czytana przez RSS, zamiana ma sens. Jeśli nie, trzecie zapytanie z czterech można pominąć bez konsekwencji.
Po zmianie domeny przez SQL rozsypały się ustawienia niektórych wtyczek, dlaczego?
Wtyczki takie jak WooCommerce, Advanced Custom Fields i slidery przechowują URL w zserializowanych tablicach
wp_postmeta. ZwykłeREPLACEnie uwzględnia licznika długości ciągu w serializacji i psuje strukturę. Rozwiązanie: Better Search Replace lubwp search-replace(deserializują tablicę, zamieniają ciąg i serializują z powrotem). Jeśli już Państwo uszkodzili bazę, proszę przywrócić ją z kopii zapasowej i powtórzyć zamianę właściwym narzędziem.
Co robić w skomplikowanych przypadkach: sklepy, multisite i duże bazy
Zamiana domeny przez SQL to pięciominutowa procedura, jeśli mają Państwo bezpośredni dostęp do phpMyAdmin i standardowy prefiks tabel. Są jednak sytuacje, w których ręczna zamiana przez REPLACE jest naprawdę niebezpieczna.
Sklepy internetowe na WooCommerce z setkami tysięcy zamówień. Sieci multisite z dziesiątkami osobnych tabel dla każdej podstrony. Strony, gdzie URL są na sztywno zaszyte w zserializowanych tablicach (ustawienia motywów, kreatory stron, slidery). W takich przypadkach pojedyncze SQL REPLACE może uszkodzić strukturę danych, a przywracanie bazy z kopii zapasowej zajmie więcej czasu niż staranna zamiana za pierwszym razem.
Better Search Replace lub WP-CLI search-replace potrafią pracować z serializacją, proszę ich użyć. A jeśli rozmiar bazy przekracza gigabajt i cena błędu jest wysoka, godzina pracy dev-specjalisty będzie kosztować mniej niż przywracanie sklepu, którego przestój kosztuje pieniądze.
Temat przenoszenia strony z zachowaniem SEO i bez utraty ruchu omawialiśmy w osobnym poradniku. A jeśli napotkali Państwo konkretny błąd po zamianie, proszę pisać w komentarzach, pomożemy z diagnostyką.



