fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
8 minut

Migracja z BlogEngine.NET do WordPress


10.01.2013

Z zamiarem przeniesienia się na WordPress nosiłem się od dawien dawna (od przynajmniej dwóch lat). Bo BlogEngine, na którym zaczynałem blogować, po prostu ssie. Zbyt wiele czasu straciłem babrając się w kodzie i naprawiając jakieś durne błędy, zbyt wiele rzeczy nie działa jak trzeba. Jednak migracja nie miała sensu, skoro przez ostatnie miesiące (czy może nawet rok?) prawie nic ciekawego się na blogu nie działo… Ale skoro teraz ponownie zaczęło (co odbija się na rekordowych jak do tej pory wartościach subskrypcji RSS i fejsowych lajków) to postanowiłem w końcu się za to zabrać. Tym bardziej, że to niby miało być proste.

“Niby miało być” – dobre określenie.

Ale po kolei, gdyby ktoś także chciał podążyć tą ścieżką, spisałem wszystko co zrobiłem aby to osiągnąć:

Eksport z BlogEngine.NET do BlogML

W głównym panelu “Settings” na samym dole znajdziemy przyciski “Import” i “Export”. Eksport generuje plik XML w formacie BlogML z całą zawartością bloga. O dziwo ten proces honoruje ustawienie “Server time offset”, więc nie musimy przejmować się zmianą wszystkich dat po eksporcie. U mnie byłby to problem, bo BlogEngine stał w USA, więc miałem przesunięcie chyba 7h w stosunku do czasu na serwerze. Takie rozwiązanie jest niesamowicie głupie, bo BlogEngine powinien stosować DateTime.UtcNow zamiast .Now i pytać o docelową strefę czasową, ale cóż… O tym już pisałem.
U mnie ten plik zajmuje ok 5MB (czyli po dodaniu xmlowych śmieci piszę 1MB rocznie:) ).

Edycja BlogML

Goły plik BlogML nie jest wystarczający do importu do WordPress. Najpierw musimy ręcznie pozamieniać ID kategorii na ich nazwy. Zwykłe replace [category guid] => [category name] w całym pliku.

Oprócz tego wypada zadbać o to, aby wszystkie obrazki wyświetlane na blogu nadal działały. W tym celu ponownie korzystamy z replace: /image.axd?picture= => /wp-content/uploads/ .

Instalacja i konfiguracja WordPress

Jak zainstalować WordPress – niech każdy sobie poszuka we własnym zakresie. Ja użyłem “Galerii aplikacji Microsoft” czy jakoś tak dostępnej Webio. Zainstalował się WP 3.4 i przy tej wersji zostałem – próba automatycznego update do v3.5 wszystko mi się wywróciło i musiałem instalować całość od nowa.

Po zainstalowaniu trzeba wrzucić wszystkie obrazki/pliki do /wp-content/uploads. Dobrze jest też skonfigurować od razu ustawienia strefy czasowej.

Przed importem naszych danych konieczne jest wybranie struktury URLi generowanych dla postów – po to, aby proces importu je honorował.

W tym momencie można też stworzyć statyczne strony istniejące na poprzednim blogu, np “O autorze” czy “Kontakt”.

Import danych do WordPress

Na tym etapie ja dodatkowo musiałem podzielić wyeksportowany plik BlogML na dwa mniejsze, mniej więcej w połowie. Zawierały wszystkie metadane (autor, kategorie itd), różniły się tylko zawartościa tagów <post>. Bez tego (czyli bez podziału na pliki o rozmiarze ok 2,5MB) nie dało się wszystkich postów zaimportować, prawdopodobnie w Webio (gdzie teraz hostuję bloga) pojawiał się jakiś timeout.

Teraz trzeba zainstalować plugin do importu BlogML. Można ich znaleźć kilka, jednak nie obyło się bez grzebania w PHP. Wybrany przeze mnie “importer” wszystko robił jak trzeba – ale ignorował tagi. A tagi na blogu bywają znaczące. Dodałem więc obsługę tagów do procesu importu i wrzuciłem kod na GitHub, zapraszam do korzystania. Aha, instalacja pluginu to po prostu wrzucenie zawartości zipa do /wp-content/plugins.

Po zaimportowaniu porcji postów (ten proces tworzy wymagane kategorie i tagi w WP) na stronie z raportem pojawia się link do pliku CSV zawierającego informacje o wymaganych przekierowaniach – bo nowa struktura URLi pewnie będzie się różniła od starych linków. Ten plik (oraz każdy kolejny dla następnych porcji postów) trzeba sobie koniecznie zapisać na dysku.

Przekierowania

Kolejny krok to zadbanie o to, aby stare linki działały jak trzeba. Do tego celu wykorzystałem plugin Redirection. Najpierw skonfigurowałem ręcznie przekierowania dla statycznych stron. Potem zabrałem się za tagi… o dziwo standardowa struktura z BlogEngine działała z jednym wyjątkiem: tagi wielowyrazowe są w BE bezsensownie rozdzielane plusem, a w WP potrzebny jest minus. Jednak nie jest to nic z czym nie poradzą sobie dwa przekierowania regex:

  • /\?tag=/(.*?)\+(.*?) => /tag/$1-$2
  • /\?tag=/(.*?)\+(.*?)\+(.*?) => /tag/$1-$2-$3

Na koniec wypada zaimportować zapisane wcześniej CSV wygenerowane podczas importu (polecam uprzednią edycję CSV i zmianę docelowych URLi na relatywne wykasowując z nich domenę aby uniknąć problemów w razie zmiany domeny później – tak jak miało to miejsce u mnie, ponieważ najpierw wszystko robiłem na “testowej” domenie z Webio z końcówką hostingasp.pl).

Dodatkowe przydatne pluginy

Przyznam, że mnogość plulginów i różnorodne ich zastosowania w WordPress bardzo mi zaimponowały. Poniżej pluingy które wykorzystuję na blogu:

  • SyntaxHighlighter Evolved – do kolorowania kodu (tylko kod w nadchodzących postach będzie pokolorowany, nie chciało mi się babrać we wszystkich poprzednich które i tak nie wyglądają źle)
  • The Simplest Favicon – dba o to, aby favicon.ico był zawarty w nagłówku strony; nie ma co prawda opcji dodania query stringa do URLa, więc większość z Was widzi pewnie jeszcze moją starą ikonkę, ale nie chciało mi się szukać dalej
  • Smart Archives Reloaded – do wygenerowania strony z archiwum
  • Contact Form 7 – do obsługi strony kontaktowej
  • WP Mail SMTP – do wysyłania maili, która to funkcjonalność nie działała mi prosto po instalacji
  • Primary Feedburner – do zastąpienia URLi do wygenerowanych przez WordPress RSSów moimi linkami do FeedBunera
  • Subscribe to Comments Reloaded – do wysyłania powiadomień o nowych komentarzach osobom, które same komentarz zostawiły
  • Add This – dodaje przyciski do tweetnięcia, polajkowania i google+1owania (boczne widgety to standardowe mechanizmy Twittera i Facebooka)

Theme

Tutaj nie pomogę – mi samemu (i mojej Joannie zresztą też) dobranie theme zajęło dobre kilka dni. Koniecznie chciałem płatny, żeby nie być jednym z miliona takich samych blogów w sieci – zakładam że większość blogów korzysta jednak z darmowych rozwiązań. Mimo to musiałem i tutaj pogrzebać ręcznie w PHP (m.in. żeby na stronie głównej mieć streszczenia postów a nie całe posty albo usunąć wymagany obrazek logo i zastąpić go tekstem). Dodatkowo w praniu wychodzą bugi szablonu (np posty które mają zamknięte komentarze w ogóle komentarzy nie wyświetlają, nie da się dodać komentarza z IE10…) – ale mam nadzieję że to rozwiąże support firmy produkującej theme.

Kaniec bajki

Ja jestem z wyniku zadowolony – theme mi się podoba, a możliwości WordPressa są bardzo wypasione. Wreszcie mogę ustawić przyszłą datę posta! w BE takie posty nie pojawiały się w RSS. Mogę też wygodnie zarządzać treścią bez ręcznego babrania się w XMLach. Ba, mogę nawet na swoim Nexusie 7 odpalić centrum dowodzenia i stamtąd chociażby usuwać spam z komentarzy.

Mam nadzieję, że komuś tak zmęczonemu BlogEngine jak mi ten tutorial się przyda. Mi czegoś takiego zdecydowanie brakowało.

0 0 votes
Article Rating
6 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Robert
Robert
11 years ago

i zdjęcie autora takie… poważniejsze :D

zabanet
zabanet
11 years ago

Przechodzilem to samo. Najpierw blog engine (jak Maciej Aniserowicz to wybral to musi byc dobre) a potem WP (zdaje sie ze tez za rada wyczytana w ktoryms z Twoich postow). Po tym wpisie bylo by latwiej ;).
Dzieki za powrot. Czasem ni cholery nie rozumiem o czym piszesz jak poruszasz niektore techniczne tematy ale i tak z jakas dziwna przyjemnoscia czytam wszystko do dechy.
Ps.
Ten komentarz jest zarazem testem dodawania komentarzy z androida. Na BE sie nie dalo…
Pozdrawiam

gorczas
gorczas
11 years ago

Najbardziej brakuje mi tutaj teraz wyszukiwarki, która była na poprzednim blogu. No nic, google trzeba używać :)

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również