Na naszym komputerze programistycznym utworzyłem witrynę w WordPress. W używanym przez nas temacie istnieje wiele stref widżetów do wyświetlania tekstu (pasek boczny i strona główna). Użyłem prostych widgetów tekstowych we wszystkich tych strefach, aby umieścić nasze wyświetlane informacje.
Kiedy przeprowadziłem migrację strony do wersji produkcyjnej, skorzystałem z wtyczki WP-DB-Backup, aby zrobić migawkę bazy danych. Następnie poddałem edycji wynikowy plik .sql, aby zaktualizować wszystkie ścieżki do plików i odwołania do adresów URL, aby wskazywały na naszą stronę produkcyjną.
Po utworzeniu bazy danych, strony internetowej i skopiowaniu wszystkich plików do witryny produkcyjnej uruchamiam plik .sql z wiersza polecenia mysql, aby zaimportować dane do nowej bazy danych.
Jednak kiedy idę na stronę produkcyjną, część tekstu pojawia się, a część nie. Kiedy patrzę na sekcję widżetów w witrynie, w niektórych strefach widżetów brakuje widżetów tekstowych. Widżety tekstowe nie są nawet widoczne w strefie „Nieaktywny widget”, po prostu ich nie ma.
Próbowałem nawet powtórzyć ten proces przy użyciu wtyczki BackWPup, zauważając, że składnia SQL jest inna, gdy zrzuca bazę danych.
Dlaczego tracę dane widżetu tekstowego podczas importu?
Odpowiedzi:
Oto twój problem:
Nie możesz tego zrobić. WordPress przechowuje wiele opcji jako „serializowane dane”, które zawierają zarówno ciąg znaków rzeczy, jak i ich długość . Kiedy więc zmodyfikujesz adres URL i zmieni się długość, dane serializowane nie będą już poprawne, a PHP je odrzuci.
Problemem długoterminowym jest to, że zasadniczo robisz to źle. Jeśli konfigurujesz witrynę programistyczną, która będzie podlegać migracji danych, powinna ona mieć dokładnie ten sam adres URL, co witryna produkcyjna. Możesz ręcznie edytować plik HOSTS, aby nadać tej domenie produkcyjnej (np. Example.com) inny adres IP (np. 127.0.0.1), a zatem „produkcyjny” adres URL stanie się witryną programistyczną, tylko dla Ciebie. Następnie możesz utworzyć swoje dane i linki oraz wszystko inne przy użyciu tego produkcyjnego adresu URL, a podczas migracji danych nic o tym nie trzeba zmieniać.
Jednak w krótkim okresie nie używaj prostego wyszukiwania / zamiany tekstu w pliku SQL. Jak odkryłeś, to psuje rzeczy.
I waham się, czy to zasugerować, ale istnieje sposób na zmianę kodu podstawowego WordPress w celu obsługi tych zepsutych serializacji. Musisz zmodyfikować plik wp-include / functions.php i zmienić funkcję może_unserialize () na:
To NIE jest realne długoterminowe rozwiązanie. Powinien być używany tylko do podniesienia Cię do działania i natychmiastowego działania. Na dłuższą metę musisz naprawić proces programowania, aby nie trzeba było na początku tego typu mungowania adresów URL.
źródło
most famous worst code
nagroda nie musi już szukać.Aby rozwiązać ten problem, zawsze używam narzędzia WordPress Serialized Search & Replace podanego tutaj. Działa idealnie bez żadnych problemów. Używam tego od dawna we wszystkich moich wymaganiach dotyczących migracji witryny. To naprawdę rozwiązuje problemy z migracją programistycznej bazy danych do produkcji.
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
źródło
http://localhost/Me/site_name
przezhttp://site.dev
(od jednego do drugiego hosta lokalnego) za pomocą v 3.0.0 I nie stracić swoje pozycje menu widgetów i dość dziwnie. Być może więc ten problem dotyczy również długości łańcucha.localhost/Me/site_name
zsite.dev
.Odpowiedź Otto jest natychmiastowa. Odkryłem to również na własnej skórze.
Udało mi się jednak obejść ten problem za pomocą fajnego skryptu ze strony http://spectacu.la/search-and-replace-for-wordpress-databases/
Aby przeprowadzić migrację WordPressa i nową nazwę adresu URL / domeny, wykonaj następujące czynności:
źródło
OP był nadgorliwy podczas wyszukiwania i zamieniania pliku eksportu bazy danych i ostatecznie zmienił występowanie „wp_” w niektórych serializowanych danych. Rozwiązaniem jest być bardziej oszczędnym w wyszukiwaniu i zamianie, włączając backtrick w wyrażenie regularne, a następnie ręcznie aktualizując pozostałe klucze w bazie danych po zaimportowaniu.
Jeśli przeprowadzasz migrację i zmieniasz prefiks i podoba Ci się podejście bardziej ręczne, wykonaj następujące czynności (dotyczy to tylko problemów PO i nie dotyczy aktualizacji adresu URL witryny)
źródło
Użyłem wtyczki WP Migrate , która zastępuje łatki http i foldery. Mam jeden problem podczas importowania, ale rozwiązałem umieszczanie następujących wierszy u góry wygenerowanego kodu SQL:
Próbowałem również z narzędziem Search And Replace (v2.1), na które odpowiedział @Yoav, ale nadal psuje moje zserializowane dane.
źródło