tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Woocommerce ja WC-CLI

WP-CLI on tapa ohjata ja säätää WordPressiä komentorivin kautta. Saat kutsua komentoriviä nimillä terminaali, shell tai SSL – koko ajan kyse on samasta: graafisesta ympäristöstä ei ole tietoakaan. Kaikki menee komentoilla, jotka näyttävät tottumattomille hyvinkin kryptisiltä. Mutta niillä saa tehtyä vaikka mitä. Pelkästään WordPressin asentaminen tai siirto toiseen osoitteeseen onnistuu shellissä paljon helpommin kuin selaimella. Woocommerce otti käyttöön WordPressin WP-CLI:stä oman laajennuksen, jota usein kutsutaan nimellä WC-CLI. Kyseessä ei siis ole varsinaisesti mikään oma komentoriviratkaisu, vaan lisäosan oma laajennus WP-CLI:hin.

Jotta päästään vauhtiin, niin asennetaan WC CLI. Jos käytät WP-CLI:tä sudo-tunnuksella, et rootina, niin voit jättää --allow-root pois.

wp package install wp-cli/restful --allow-root

Käytöstä yleisesti

Löydät kaikki WC CLI:n komennot täältä. Muoto on mallia wp wc KOMENTO. Ja kuten aina, niin eri attribuuttien muoto ei ole aina ihan selvä. Varmaan se on koodareille ihan arkipäivää, mutta minulla oli aika ajoin vaikeaa. Usein kokeilemalla selviää ja hiukan googlella loput. Joskus.

Esimerkiksi --force, joka pakottaa jotain, hieman asiayhteydestä riippuen. WordPressin WP CLI:ssä --force annetaan sellaisenaan, mutta WC CLI:ssä se kielletään tai sallitaan erikseen. Joten oikea muoto on --force=1.

Kun yritin saada kuponkeja järjestykseen --after ja --before avulla, niin ei onnistunut. Päivämäärä kuuluu antaa ISO 8601 muodossa eli VVVV-KK-PP, mutta sain koko ajan ilmoituksen, että päivämäärän muoto on väärin.

Saatat saada virheilmoituksen, että sinulla ei ole oikeutta tehdä jotain, kuten listata tuotteita, käyttäjiä tai kuponkeja. SIlloin käsketään asettamaan --user lippu. Pienen googletuksen jälkeen hyväksyttävät arvot ovat admin-oikeudet omaavan ID, tunnus tai sähköpostiosoite. Mutta en koskaan saanut mitään toimimaan, jos en antanut nimenomaan adminin ID:tä eli muoto on --user=1.

Muutoin minun oli vaikea löytää WC CLI:lle mitään aitoa hyötyä normaalissa arkipäiväisessä käytössä. Devaajille se varmasti antaa enemmän työkaluja. Esimerkiksi isojen määrien import/export olisivat juurikin komentorivipuolen heiniä, mutta se ei aidosti onnistu – ainakaan vielä. Tosin minulla on hieman sellainen olo, että Automattic ei edes halua panostaa WC CLI:n kehittämiseen – siitä on vaikea rakentaa tulovirtaa ja se haastaisi lisäosamarkkinat. Nyt täytyy muistaa, että käytännössä import-toiminnot ovat mahdollisia vain maksullisten pluginien kautta.

Mutta varmasti osa vastahangastani perustuu siihen, että en vaan osaa. Ensi viikolla saatan olla sitä mielipuolta, että mikään ei ole niin näppärä Woocommercen ylläpidossa kuin WC CLI.

Kun olet asentanut WC-CLI:n, niin saat tarkistettua shellissäkin mitä voit tehdä:

wp wc tool list --user=1

Kuponkien massapoisto

Komentorivi on parhaimmillaan, kun tehdään massahommia. Minulla on vuosien saatossa kertynyt tuhansia kuponkeja. Erehdyin aikoinaan kokeilemaan automaattista kuponkien jakoa tilausten ja uutiskirjeen myötä. Sinänsä ne eivät suurempia kiusaa, eikä tietokannankaan kokokaan aito ongelma ole. Mutta kun etsii määrättyä kuponkia, niin haku hidastuu.

Haluaisin poistaa kaikki, mutta tässä tulee sivuilla tehtävien operaatioiden hankaluus vastaan. Saan yhdelle sivulle näkyviin maksimissaan 999 kohdetta. Mutta niitä ei voi kaikki poistaa kerralla, koska homma kaatuu liian pitkään urliin. 200 per sivu toimii paremmin, mutta siinäkin ollaan rajoilla. 100 per sivu toimii, mutta sitten saisin tehdä valitsekaikki-poista systeemin noin 30 kertaa. Kiitos ei.

WC CLI periaatteessa auttaa. Paino sanalla periaatteessa.

Tällä saat poistettua yhden kupongin.

wp wc shop_coupon delete --id=NUMERO

Kun tehdään mitä tahansa massatoimintoa ID:n kautta, niin muutetaan hieman. Meidän täytyy saada eräänlainen luuppi id-tunnuksille.

wp wc shop_coupon delete $(wp wc shop_coupon list --user=1 --format=ids) --force=1 --user=1

Muuten ihan kiva, mutta antaa virheen:

Error: Too many positional arguments

Tuo tarkoittaa sitä, että komento sai liian monta kuponkien ID:tä argumentiksi. Se johtuu siitä, että shop_coupon delete osaa poistaa vaun yhden kupongin kerrallaan. Joka minun maailmassani tekee koko komennosta täysin tarpeettoman.

Joten kun alussa sanoin, että kuponkien massapoistamisessa WC-CLI auttaa periaatteessa, tarkoitin, että se tehdään WP-CLI:n avulla ja unohdetaan koko Woocommercen laajennus.

On muistettava yksi asia. Jokainen artikkeli, sivu, podcast, LearnDashin kurssi, Woocommercen tilaus tai kuponki on postaus. Siksi WordPressin ID pyörähtää aina yhdellä pykälällä, kun julkaistaan ihan mitä tahansa. Jokainen postaus on sitten erikseen määritelty omaksi tyypikseen, joten hyödynnetään tuota.

wp post delete $(wp post list --post_type='shop_coupon' --format=ids) --force
  • määritetään postauksen tyypiksi shop_coupon
  • --force pakottaa poistamaan kulkematta lähtöruudun kautta eli ne eivät mene roskikseen

Tällä tavalla voidaan poistaa ihan mitä vaan Worpdressistä. Onko tarpeen muistuttaa, että näitä toimintoja ei voi sitten perua.

Kaappasin tuon esimerkin jutusta, jossa oli poistettu 30 000 tuotetta Woocommercen roskiksesta. Määrä oli ollut liian suuri jopa bashille ajaa kertalaakista, mutta kun määrä oli pudotettu 10 000 kappaleeseen, niin onnistui.

delete $(wp post list --post_status=trash --post_type='product' --format=ids --posts_per_page=10000) --force

Toki alkuperäinen kirjoittaja joutui ajamaan tuon kolme kertaa, mutta kirjoittaa komento kerran ja suorittaa se nuolinäppäin-ylös toistolla on pahuksen paljon nopeampaa kuin poistaa niitä 200 kappaleen batcheissa Woocommercen hallinnassa.