Migrace z RS2 na WordPress
Čas se nachýlil, a jelikož jsem uznal, že je RS2 definitivně mrtvý redakční systém bez vyhlídek na nějaký vývoj, rozhodl jsem se tedy celý web převrhnout na něco nového. Požadavky byly veskrze jednoduché, stačí mi systém, kde nebudu muset nic moc řešit (čas na to opravdu nemám), a který bude obstojně vypadat na mobilu, používat nějaký responzivní template, když se náhodou příspěvek vloží třeba na facebook, tak se tam doplní takové ty opengraph věci a tak.
Chvíle které jsem se tak děsil nastala, JAK to proboha převedu se zachováním všech textů a komentářů? Kdybych migroval třeba z Joomly, nebo Drupalu, věřím, že nástroje existují již hotové, ale RS2 rozhodně není světově používaný systém (sorry juneau 🙂 )
Žádný konkrétní step-by-step návod psát nebudu, ale v bodech co jsem řešil a jak jsem to vyřešil.
Začal jsem prostým exportem tabulky web_texty a web_komentáře z databáze RS2. S SQL končím u SELECTu, takže jsem exportoval do CSV, které se dá přeci tak snadno editovat v PSPadu či Excelu a pak ho jednoduše naimportuji pomocí nějakého WP pluginu – ano WP umí pluginy a je jich jen na webu WP asi 50 tisíc.
Texty/Příspěvky
V příspěvku WordPress. Nastavení, tipy a pluginy co jsem použil jsou vypsány plus mínus aktuálně používané pluginy na tomto webu.Zkoušel jsem WP All Import a WP Ultimate CSV Importer vypadalo to nadějně, ale pořád to nefungovalo, protože 100+1 problém co jsem řešil postupně dále. Import nakonec zvládl Really Simple CSV Importer. Pořád jsem to CSV upravoval ale co nerozbil Excel to rozbil PSPad/Notepad++ při hromadném nahrazování. Navíc si to chce pořád hlídat oddělovač, kódování, obalení uvozovkami atd.
Začal jsem tedy hledat nějaký program na úpravy CSV souborů a z toho co jsem zkoušel vyšel naprosto vítězně CSV Editor Pro! Je to sice jen 30-denní trial, ale to nám stačí. Program umí naprosto zásadní věci jako spojování sloupců, multiline, trim whitespaces, popral se zatím s každým CSV co jsem mu dal, a je otázkou pár kliků pro změnu separátoru, uvozovky, kódování..
V CSV Editoru Pro jsem tedy začal všechny příspěvky editovat (občas se to neobešlo bez mezikroku s regexy v PSPadu (odmazání zbytků po Texyle, nějaké to nahrazování, ..) přejmenoval jsem názvy sloupců podle sample.csv z Really Simple CSV Importeru, vykosil nepotřebné HTML, znaky.. nahradil nějaký zbytečnosti, provedl zásadní věc a to spojení sloupců perex a text do jednoho (a mezi nimi je vložen tag MORE)
Při importu to pořád padalo na jednom příspěvku, tak jsem z CSV vymazal post_content, a po importu ho ručně vložil jako HTML přímo v administraci WP. Import se povedl, a na první pohled to vypadá výborně! Jsem smířen s tím, že jsem přišel o kategorie, ale stejně jsem je chtěl probrat a tak je vytvořím znovu. Dále budu muset zkontrolovat formátování textu, ale na první pohled to zas tak blbě nevypadá a v neposlední řadě budu muset opravit obrázky (šlo by hromadně změnit url v CSV před importem, ale chtělo by to změnit i to HTML kterým jsou obalené, a tak těch pár obrázků doedituju ručně. Tím pokládám Texty/Příspěvky za vyřešené.
Komentáře
Po Příspěvcích by to chtělo i komentáře, ty jsem chtěl 100% zachovat, protože si pod některými příspěvky dost žijí vlastním životem a je v nich spousta rad a odkazů.
Jenže ouha, žádný z importních pluginů pro WP co jsem našel neumí importovat komentáře z CSV! Budeme to tedy muset nějak spáchat ručně.
Bylo tedy třeba přejmenovat sloupce dle tabulky WP, doplnit email ke všem komentářům (dobře asi to není úplně nutné, ale u WP je to povinné pole), takže jsem doplnil example@example.com 🙂 z textu komentářů jsem zrušil všechno HTML, v Excelu jsem změnil hodnoty ve sloupci user_id na 1 pokud je autor mikrom jinak 0. comment_date a comment_date_gmt jsem nastavil stejné, funguje to, a jesli bude nějaký deset let starý komentář o hodinu či dvě mimo mi je buřt.
Po pár pokusech a omylech jsem měl CSV přesně odpovídající tabulce v databázi a přes PhpMyAdmin jsem ho naimportoval. Komentáře mám! Jsou všechny, vypadá to funkčně.
Jenže jsem si všimnul toho, že se mi na titulce webu neukazuje počet komentářů u příspěvků, čím to může být? aha – ono je to uložene v tabulce wp_posts u každého příspěvku ve sloupci comment_count. Jak to tam ale nějak elegantně dosypat.
Vzal jsem si tedy z CSV s komentáři sloupec comment_post_ID, kde se nám vlastně ukazuje vícekrát stejné číslo (příspěvku) přesně tolikrát kolik komentářů daný příspěvek má. Na to se hodí Excelovská funkce COUNTIF(), kdy jsem si udělal sloupec s čísly příspěvků (prostě jsem jen roztáhnul buňku o 1 do 392) a do vedlejšího sloupce jsem si nechal vypsat kolikrát je ve sloupci A hodnota z buňky ve sloupci B. Z výsledných dvou sloupců (comment_post_ID;comment_count) jsem si zase udělal CSV.
Toto CSV jsem poté zpracoval BAT souborem, který z něho udělal sadu SQL příkazů pro update tabulky.
@echo off ( for /F "tokens=1-18* delims=;" %%A in (comment_post_ID---comments_count.csv) do ( echo UPDATE `wp_posts` SET `comment_count` = %%~B WHERE `ID`=%%~A; ) ) > sql.txt
Výsledkem je něco takového
UPDATE `wp_posts` SET `comment_count` = 0 WHERE `ID`=1; UPDATE `wp_posts` SET `comment_count` = 0 WHERE `ID`=2; UPDATE `wp_posts` SET `comment_count` = 0 WHERE `ID`=3; UPDATE `wp_posts` SET `comment_count` = 0 WHERE `ID`=4; UPDATE `wp_posts` SET `comment_count` = 10 WHERE `ID`=5; UPDATE `wp_posts` SET `comment_count` = 10 WHERE `ID`=6; UPDATE `wp_posts` SET `comment_count` = 0 WHERE `ID`=7; UPDATE `wp_posts` SET `comment_count` = 2 WHERE `ID`=8; ...
takže, pro rekapitulaci, v tabulce wp_posts doplníme do sloupce comment_count počet komentářů daného příspěvku.
Nyní se již ukazuje v administraci WP kolik má daný příspěvek komentářů a i na té titulce webu se již informace ukazuje.
Pozor si dejte na to aby skutečně odpovídaly všechny komentáře ke všem příspěvkům! asi na dvou místech se mi to posunulo třeba o jeden a to pak bylo správné SQL harakiri porovnat.
Počty přečtení
Zatím jsem neřešil počty přečtení příspěvků, ale RS2 to v databázi má, a určitě byl nebyl problém těmi daty předkrmit nějaký WP plugin, třeba WP-PostViews.
Přesměrování starých adres
To je asi poslední věc co řeším, stále. Nechtělo se mi to řešit zase přes .htaccess, takže jsem se opět poohlédnul po pluginu a našel Redirection. Plugin je opravdu výborný, narozdíl od .htaccess mám přehled kolikrát bylo přesměrováno a také všechny 404ky ze kterých lze rovnou vytvořit další pravidla pro přesměrování.
Pravidla jsou nastavit buď jednoduchá – /tuhle/url/ -> /presmeruj/na/tuhle/, nebo pomocí oblíbených|nenáviděných regulárních výrazů (jedna z nejzásadnějších věcí co mě naučili na VŠ) – \/(tuhle)|(nebo-tuto)\/url\/ -> /presmeruj/sem/.
Pro RS2-WP kompatibilitu musíme pořešit odkazy na texty-příspěvky, články-stránky, obrázky, soubory, .. Takový základ je zde:
zdroj | cil | regex | popisek |
\/(\d{1,3})\- | /?p=$1 | ano | Ve staré verzi RS2 začínaly texty číslem. |
\/text\-([\w-]+) | /$1 | ano | V současné verzi RS2 začínají texty slovem „text-„. |
\/clanek-19(\/?) | /category/geocaching/ | ano | Ve staré verzi RS2 jsou články problém, obsahují pouze číslo a tak se musí pro každý článek napsat redirect samostatně. V současné verzi RS2 se to řešit vůbec nemusíme! |
(\/55\/)|(\/dokumenty\/55\/)|(\/docs&file=55)|(\/dokumenty\/hausmann\.pdf)|(\/soubory\/dokumenty\/hausmann\.pdf) | /wp-content/uploads/2016/10/hausmann.pdf | ano! | Dokumenty jsou taky peklo, během vývoje RS2 se odkazy měnily a různě po netu se povalují různé verze odkazů – tady oceníme regex! |
/archiv/kategorie/27/ | /category/kolobezky/ | ne | Kategorie textů a souborů se musí řešit bohužel také každá zvlášť. Na to se hodí to sledování 404ek, a přesměrovávat to co je třeba. |
\/archiv\/\?autor\=\&kategorie\=\&mesic\=(\d{4})(\d{2})$ | /$1/$2/ | ano | Archivy se dají řešit docela elegantně. |
\/archiv\/mesic\/(\d{4})(\d{2})\/$ | /$1/$2/ | ano | Další pravidlo pro archivy |
\/obrazky\/pc\/bt-in-t23\/(.+\.jpg) | /wp-content/uploads/2007/09/$1 | ano | Obrázky z příspěvků mi přivádí hodně lidí, je to docela jednoduché, jen se změnila url, obrázky zůstaly stejné. Ale zase se to musí udělat pro každý příspěvek zvlášť. |
\/obrazky\/texty-(galerie|doprovodne)\/383\/(.+\.jpg) | /wp-content/uploads/2014/08/$2 | ano | Takhle jsou zase obrázky v novější verzi RS2. |
/rss.xml | /feed | ne | No a pak už se jen ladí detaily. |
Konec?
To je zatím vše co mě napadá, uvidíme co se vyrojí dál..
Ha, to tedy bylo fest úsilí a ohromné množství práce, klobouk dolů. Před měsícem jsem přenášel RS2 s desetiletým archivem na WP, tak vím, co to obnáší. Obzvlášť, chtěl-li jsem to mít plně automatizované, a 100% – tedy všechny staré URL a obrázky v textech patřičně nahrazené, všechny obrázky a dokumenty naimportované do Knihovny médií … atd atd. Nakonec jsem skončil s naprogramováním WP pluginu, kde je za sebou asi 15 tlačítek, každé spouštějící import něčeho jiného. A po dvou týdnech jeho připravování jsem pak jen postupně všechna tlačítka odklikal, a měl nový plně funkční WP web s obsahem původního… Číst vice »
Budiž RS2 země lehká. Už nefunguje ani http://rs.reality-show.net/ 🙁 Stejně tam to fórum bylo zaspamovaný…
Mě už taky RS2 dosluhuje a stále jak psychicky, tak fyzicky odkládám migraci na WP. Jednoho dne to ale přijde a tak sháním někoho, kdo by odvedl „špinavou práci“ za mě 🙂 Samozřejmě nechtěl bych to zadarmo… Jeneau asi ten plugin na převod nedokončí, a ty s tím máš zkušenosti 🙂 Kdyžtak se mi pls ozvi na mail. Dííík.