tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

WP CLI: WordPress-sisällön vienti ja tuonti (export/import)

Aika ajoin saattaa tulla tarve siirtää sisältöä WordPress-sivustolta toiselle. Yleensä aina puhutaan artikkeleista, mutta joskus sivuista ja välillä jopa valikoista. Siihen löytyy erilaisia lisäosia, parempia ja… hieman vähemmän hyviä. Kourallisen artikkelien tekstin ja liitteiden export/import onnistuu kivuttomasti, mutta jos pitää siirtää satoja, jopa tuhansia juttuja, niin harvempi lisäosa hoitaa homman jouhevasti. Ne on pakko viedä ja varsinkin tuoda pienissä erissä, koska timeout tulee herkästi. Webhotelleissa kannattaa käyttää WordPressin sisäänrakennettua vienti- ja tuonti-työkaluja, mutta virtuaaliservereillä oleskelevat voivat tehdä työnkulusta joustavampaa. WP CLI työskentelee suoraan tietokannan kanssa, on nopeampi ja säästää tehoja.

Vienti/tuonti-toiminnassa on syytä pitää mielessä, että sitä ei ole tarkoitettu käytettäväksi sivuston muuttohommissa. Siihen on paremmat työkalut, ja WP CLI helpottaa siirtoja. Export/import on nimenomaan sisällön siirtämistä, ei sivuston, käyttäjien tai muun toiminnallisuuden. Minulla oli aikoinaan ratsastusaiheinen blogi. Kun hevosharrastus hieman hiipui (oikeammin ratsastus, hevosia on kotona edelleenkin), niin en enää viitinyt pitää kahta erillistä ja huomattavan laiskasti päivittyvää blogia. Päätin siis siirtää hevosblogin artikkelit kuvineen, kategorioineen ja tageineen osaksi toista blogiani. Se tehtiin nimenomaan viemällä ja tuomalla.

Artikkelien vienti

Olisin voinut tehdä viennin WordPressin hallinnasta, mutta komentoriviltä suoritettava WP CLI on helpompi ja nopeampi, vaikka normaalisti tunnenkin oloni kotoisammaksi graafisen käyttöliittymän kanssa.

Koska kyse oli pelkästään itse tekemästäni sisällöstä, niin minun ei tarvinnut murehtia kirjoittajista. Siksi komento oli helpompaakin helpompi:

wp export

Kyseessä on tismalleen sama export, jota käytettäisiin WordPressin hallinnassa Työkalut > Vie. Se vain ajetaan shellissä. Ero tulee valinnoissa.

Työkaluna export/vie tarjoaa vaihtoehdoiksi koko sisällön tai sivustolla sallitut custom post -tyypit. WP CLI antaa lisää vaihtoehtoja. Voit mm. viedä

  • vain määrätyn kirjoittajan tekstit
  • vain määrätystä kategoriasta
  • vain määrätyltä ajanjaksolta
  • vain määrätyssä tilassa olevat, kuten vain luonnokset
  • vain määrätyn tyyppiset tai sulkea pois jonkun custom postin
  • liitteillä tai ilman liitteitä

Sinänsä aika mitätön asia, mutta antaa tunnut jouhevasta työnkulusta, on tehtävän .xml -tiedoston tekeminen suoraan kohdehakemistoon. Jää yksi siirto pois välistä, jihuu.

Mikään siirto ei osaa lukea ajatuksia. Jos mukana tulleet kategoriat ja tagit kelpaavat uudessa osoitteessa, niin kaikki on hyvin. Jos ei, niin sitten niitä aletaan vääntämään paikalleen importin jälkeen. Mikäli tiedät jo etukäteen, että joudut moisia hiomaan paikalleen, eikä sinulla ole pakottavaa tarvetta saada tuotuja juttuja heti julkiseksi, niin muuta artikkelien tila luonnokseksi ennen kuin teet viennin.

WP CLI:llä se onnistuu nopeasti:

wp post update $(wp post list --post_type=post --format=ids) --post_status=draft

wp post update antaa useammankin muokattavan kohdan. Voit mm. vaihtaa omistajaa, päiväystä jne.

Artikkelien tuonti

Artikkelin tuonti kohdesivustolla on jotakuinkin yhtä helppoa. Ja kun vienti, niin tuontikin käyttää WordPressin omaa tuonti/import-työkalua. Ja tässä on pieni ero vientiin nähden.

Vie-toiminto on valmiina WordPressissä, mutta tuo/export ei ole. Jos et ole ottanut sitä käyttöön, niin WP CLI:n import-komento ei toimi. Mutta ei sinun sen takia tarvitse sivustolle kirjautua. Komenna tämä ja se asentaa sekä aktivoi tuonti-työkalun:

wp plugin install wordpress-importer --activate

Tuodaan äsken viedessä luotu xml-tiedosto:

wp import jokunimi.xml --authors=skip

wp importkomennolla ei ole paljon vaihtoehtoja. Niistä pakollinen on --authors, jolla on kolme vaihtoehtoa:

  • skip, jolloin omistajaa ei aseteta, jos alkuperäistä kirjoittajaa ei ole kohteessa
  • create, jolloin omistaja luodaan, jos alkuperäistä kirjoittajaa ei ole kohteessa
  • csv-tiedosto, joka sisältää vanhat ja uudet käyttäjätunnukset, jos ne halutaan muuttaa

csv-tiedoston muoto on yksinkertainen. Siinä on kaksi saraketta, old_user_login ja new_user_login, ja tietueet erotetaan pilkulla.  Voisin siis tehdä vaikka tällaisen:

old_user_login,new_user_login
hemmo,tyyppi
brutal64,osaaja20

Lisäksi voit päättää --skip lipulla, että

  • attachment jättää kaikki liitteet, mukaanlukin artikkelikuvat, siirtämättä
  • image_resize ei tee lennossa kuvien kokojen muuttamisia, kuten thumbnaileja (nopeuttaa hieman)

Kuvat ja liitteet

Kuvat ja muut liitteet siirretään vain yhdessä tapauksessa: lähtevä sivusto, jossa vienti tehtiin, on olemassa ja saatavilla. Jos se on jo poistunut linjoilta, niin joudut mm. artikkelikuvien kautta menemään pidempään tietä, jossa mukaan tulee käsityöt – ja toivottavasti sinulla on kuitenkin uploads-hakemisto tallessa.

Webhotelliasiakkaat ovat yleensä moisessa tilanteessa tyhjän päällä. Useimmiten domain vanhenee samaan aikaan hotellin kanssa, ja jos näin on käynyt, niin varaa työlle enemmän aikaa. Jos sen sijaan sinulla on täysi varmuuskopio tallessa, niin suoraan sanottuna helpoin, nopein ja jopa edullisin tie on tuupata saitti pystyyn vaikka Amazonille ja käydä ostamassa yksi mikä tahansa domain. Name.com harrastaa sisäänvetotarjouksia, joissa aina jotkut domainit maksavat muutaman euron, joten osta sellainen. Pistä vanha sivusto pystyyn uudella domainilla, tee artikkelien siirto liitteineen ja poista sen jälkeen vanha lopullisesti. Jos teet moisen operaation Amazonilla, niin muista todellakin poistaa sivusto sekä siihen liittyvät tilaukset, koska muutoin laskuri pyörii koko ajan. Kulut tuolle tempulle ovat joitain euroja.

VPS-asiakkailla on helpompaa. Sivusto pystyyn, uusi domain, siirto ja vanha sivusto pois linjoilta. Oma blogisiirto tehtiin tuolla tavalla. Vanha ratsastusblogi oli ollut domainilla vastalaukka.fi, jonka annoin vanhentua varmaan vuosi ennen siirtoa. Mutta minulla oli DigitalOceanilla kuitenkin kaikki tiedot paikallaan, koska ei niiden poistamisessa sinällään ollut mitään ideaa – ei virtuaaliservereillä yleensä levytila ole mikään ongelma. Koska minulla oli laatikon pohjalla kierimässä joskus ostettu domain eksis.site, niin vanha Vastalaukka nousi pystyyn uudella domainilla siksi aikaa, että sain importin haluamat kuvat uuteen osoitteeseen. Ei se ollut kuin viiden minuutin homma, eikä tarvinnut ostaa maksullista pluginia moisen takia.

Jos joudut tuollaiseen kikkailuun, niin muista yksi asia: ota todellakin vanha sivusto pois näkyvistä tai ainakin estä hakukoneet. Viimeinen asia jonka haluat, on Googlen ilmoitukset tuplasisällöstä. Yleensä näissä tilanteissa ei ole enää tarvetta miettiä uudelleenohjauksia, mutta jos domain on hallussasi, ja sinulla on mahdollisuus, niin redirect 301 tehdään tietenkin.