stderr

Jakub Jedelský

Z Wordpressu na statickou stránku

Dlouhou dobu jsem si vedl blog na Wordpressu, který mi běžel na vlastním serveru. Kvůli změně práce a tím i rušení serveru (resp. přesunu na méně výkoný virtuál) jsem začal řešit "kam s ním". Převod části článků sem je dobrý, ale jednak se mi nechtělo převádět vše a pak, návštěvníci si cestu na starý blog ještě najdou. Zavrhnul jsem proto jen jednoduché přesměrování. A aby mi Wordpress zbytečně neběžel a nežral zdroje pro PHP, když to už k ničemu nepotřebuju, bylo řešení docela snadné - převést celý blog na statické stránky.

Krok 1.: Zálohujeme

Zálohovat před každou větší změnou je docela dobrý zvyk. Zazáloha jednoduchým vykopírováním dat i databáze tu určitě stačí.

Krok 2.: Odstranění dynamických prvků

Protože chci, aby byl web kompletně statický, je potřeba vypnout všechny dynamické prvky. Zde to záleží od webu, ale určitě to jsou komentáře (Nastavení -> Komentáře -> Odškrtnout možnost "Povolit návštěvníkům webu přidávat komentáře k příspěvkům a stránkám"), různé pluginy (u mě to byl třeba Contact Form) a vyhledávání.

Krok 3.: Stažení dat

A to je to kouzlo. Našel jsem sice bashovský skript WP-Static, který se má o vše postarat, ale funguje tak nějak na půl (už je přecejen starší). Obsahuje vlastně jen jeden užitečný řádek. Takže šup sem s ním:

wget --mirror --cut-dirs=$home_cdirs -P $home_static-static -nH -np -p -k -E $home_url

Kde:

  • $home_cdirs označuje, co všechno se má v URL po doméně odmazat. Pokud je URL Vašeho blogu example.com, pak to bude 0, pokud example.com/blog, pak 1.
  • $home_static je název adresáře, kam se obsah uloží
  • $home_url je URL samotného blogu

To si spustíte z příkazové řádky a během pár minut (v závislosti na množství stránek) máte ve složce $home_static-static obsah celého webu ve formě html souborů.

Krok 4.: Úprava stylů

Pěkné na Wordpressu je, že si zachovává informace o použitých verzích stylů a skriptů přímo v URL. Bohužel pokud z nového serveru naservírujete uri "wp-content/themes/twentytwelve/style.css?ver=3.7" a budete se tvářit, že to má být obyčejný texťák, tak to nebude úplně fungovat. Takže zkuste zapojit třeba sed a změnit všechny index.html soubory, tak aby v sobě měly jen čisté css a js. A zároveň kouknout, co už není potřeba a to smazat. Já použil něco takového, jako vidíte dole, ale bude se to lišit od webu. od použitého vzhledu a pluginů.

mv wp-content/themes/twentytwelve/style.css\?ver\=3.7 wp-content/themes/twentytwelve/style.css
mv wp-content/plugins/wp-syntax/css/wp-syntax.css\?ver\=1.0 wp-content/plugins/wp-syntax/css/wp-syntax.css
for i in $(find . -name index.html -print); do 
    sed -i 's/wp-content\/themes\/twentytwelve\/style.css%3Fver=3.7/wp-content\/themes\/twentytwelve\/style.css/g' $i
    sed -i 's/wp-content\/plugins\/wp-syntax\/css\/wp-syntax.css%3Fver=1.0/wp-content\/plugins\/wp-syntax\/css\/wp-syntax.css/g' $i
    sed  -i '/wp-content\/plugins\/contact-form-7\/includes\/css\/styles.css%3Fver=3.5.3/d' $i
    sed  -i '/<meta name="generator" content="WordPress 3.7" \/>/d' $i
    sed  -i '/Dynamic page generated in/d' $i
    sed  -i '/Cached page generated by WP-Super-Cache/d' $i
    sed  -i '/super cache/d' $i
    sed  -i '\/wp-content\/plugins\/contact-form-7\/includes\/js\/jquery.form.min.js%3Fver=3.44.0-2013.09.15/d' $i
    sed  -i '/http:\/\/dev.stderr.cz\/wp-includes\/js\/jquery\/jquery-migrate.min.js/d' $i
    sed  -i '/http:\/\/dev.stderr.cz\/wp-includes\/js\/jquery\/jquery.js/d' $i
    sed  -i '/\/wp-content\/plugins\/jquery-image-lazy-loading\/js\/jquery.lazyload.min.js%3Fver=1.7.1/d' $i
done

Krok 5.: Nahrajte obsah na server

...a kochejte se