tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Woocommerce ja kuponkien massapoisto (bulk delete)

Käytin yhdessä vaiheessa Katiskan verkkokaupassa paljon kuponkeja. Massoittain. Tein ale-kampanjoita, annoin niitä toteutuneen kaupan mukana sekä uutiskirjetilauksissa. Opin kaksi asiaa. Ensimmäinen sattui lompakkoon. Aidosti kupongot eivät lisää kauppaa kuin muutamilla erikoisaloilla ja jos kuponkirumbaan aikoo lähteä, niin kannattaa tehdä kuponkiuutismallinen, nostaa lähtöhinta korkeaksi ja myydä pelkästään kupongeilla. He jotka ostivat minulta kupongeilla olisivat maksaneet normaalinkin hinnan, joten annoin alennuksia turhaan. Toinen opittu asia oli, että kuponkien poistaminen massana on melkoinen operaatio, jos ei anna vanhentuneen kupongin poistua järjestelmästä.

Minulla oli kaikkiaan lähes 10 000 vanhentunutta alekoodia. Niitä oli kertynyt, koska tajusin liian myöhään, että kuponkien massapoisto ei ole mitään rutiinijuttu. Toki listauksessa saa artikkelien, kommenttien tai sivujen tapaan nostettua näytettävien määrää oikeassa yläkulmasta löytyvästä näyttöasetuksesta, mutta silti useampi alisivu kerrallaan poistaminen on tuskaa.

Työhön löytyy maksullisiakin lisäosia, mutta en suostu maksamaan asiasta, joka minun mielestäni pitäisi olla systeemiin kuuluva rutiinihomma. Mutta jostain syystä WordPress-maailman koodarit suhtautuvat perin vastahakoisesti massapoistoihin. Ei sitä muuten olisi niin paljon vaikeutettu.

Ison määrän kuponkien massapoisto onnistuu, mutta helposti vain, jos olet VPS-asiakas. Virtuaaliserverit mahdollistavat monet sellaiset työkalut, joita webhotelleihin ei saada.

WP CLI poistaa kupongit

WordPressin puolella saa kommentit massapoistettua melkoisen helposti WP CLI -komentorivilaajennuksella, mutta se ei ole useinkaan käytössä webhotelleissa. Woocommercelle on tehty laajennuksen laajennus, ja kun lähtee penkomaan miten ale-kupongit saisi helpoiten poistettua, niin se olisi loogisin paikka etsiä ratkaisua. Helpotan hieman elämääsi ja spoilaan heti, että ei onnistu.

Mutta ennenkuin mennään eteenpäin, niin muistetaan tärkein: otetaan tietokannasta kopio.

wp db export jokunimi.sql

Kuponkeja voi yrittää poistaa Woocommercen laajennuksen komennolla

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

mutta silloin saa vastaukseksi

Error: Too many positional arguments: <liuta ID numeroita>

Se tarkoittaa sitä, että argumentiksi voidaan laittaa vain yksi tunnus kerrallaan, ei käyttää muuttujalistaa. Suomeksi: wp wc antaa poistaa vain yhden kommentin kerrallaan. Ilkeämpi voisi sanoa, että Automatticilla ei ole suurta halua tehdä mitään sellaista työkalua, joka saattaisi uhata kaupallisten lisäosien ja palvelujen myyntiä.

Joten palataan WordPressiin ja muistetaan yksi perussääntö: sivut, artikkelit, tuotteet, kupongit, myynnit… ovat kaikki perimmältään samoja. Niitä vain kutsutaan eri nimellä. Sinulle on varmaan tuttu termi custom post.  Se on artikkeli, joka ei näytä artikkelilta, vaan esimerkiksi verkkokurssin oppitunnilta tai podcastiltä. Sama juttu Woocommercen tuotteiden kanssa. Nekin ovat custom posteja. Tiedät jo mihin tämä johtaa – kupongit eivät ole mitään muuta kuin custom posteja, joiden tunnus on shop_coupon.

WP CLI antaa poistaa minkä tahansa sivun, artikkelin, kommentin tai custom postin – myös bulkkina. Joten koska Woocommerce ei omalla laajennoksellaan auta, niin palataan takaisin perusteisiin ja WordPressiin.

Kun haluat poistaa kaikki kupongit kertalaakista, niin haluamasi komento on:

wp post delete $(wp post list --post_type='shop_coupon' --format=ids) --force

wp post delete poistaa ja muuttujaksi $ annetaan listaus artikkelityypistä shop_coupon ja ne laitetaan järjestykseen ID:n mukaan. Lippu --force on pakko laittaa mukaan, koska custom post -tyyppisiä ei voi siirtää roskakoriin, vaan ne poistetaan lopullisesti – asia, joka on syytä pitää mielessä.

Automaattinen poisto

Paras tapa on kuitenkin olla antamatta vanhentuneiden kuponkien kertyä. Tuo on kuitenkin hieman suhtautumisasia, koska joskus saattaa reklamaatioiden tai muiden epäselvyyksien takia antaa vanhojen kuponkien olla rauhassa. Jollain scriptivirityksellä varmaan saisi toteutettua poiston, jossa tuhottaisiin vain määrätyn ikäiset kupongit, mutta moinen ylittää minun kykyni – joten minulle linja on selvä: kaikki tai ei mitään.

Jos haluat antaa kupongin tuhoutua viimeisenä voimassaolopäivänä, niin laita tämä (lapsi)teemaan functions.php -tiedostoon tai Snippetsiin (joka on parempi vaihtoehto):

Jos et käytä kupongeilla vanhentumispäivää, niin tuo ei tietenkään tee mitään.

Päinvastoin WP CLI, niin tämä laittaa poistetut kupongit roskakoriin. Jos sinulla on jokin ajastettu tietokannan siivooja, jossa on mukana roskiksen tyhjennys, niin ymmärtääkseni noiden pitäisi silloin poistua siivouksen myötä digitaivaaseen.

Jos haluat tuhota suoraan kupongit, niin vaihda tämä rivi:

wp_trash_post( $coupon->ID );

tähän:

wp_delete_post( $coupon->ID, true );

Webhotellit

Webhotelliasiakkailla on vaikeampaa. Jos et käytä päivämääriä, niin ylläoleva koodi ei auta sinua. Jos et halua alkaa säätämään suoraan tietokantaa, jossa sinun pitäisi poistaa tietoja kahdesta taulusta, niin ainoaksi vaihtoehdoksi jää lisäosatarjonta.

Maksullisella puolella on enemmän vaihtoehtoja, mutta ilmaisissa tiedän vain yhden, joka poistaa massana kuponkeja. Se sitten poistaa paljon muutakin, jos haluat. Siltä osin se saattaa olla perusteltua asentaa. Tosin, minulla ei ole parhaat mahdolliset kokemukset Visser Labsin tekemien lisäosien toimivuudesta, mutta kun vaihtoehtoja ei oikein ole, niin…

https://fi.wordpress.org/plugins/woocommerce-store-toolkit/

Sillä on kuitenkin päälle 10 tuhatta asennusta ja vain yksi yhden tähden arvostelu ja sekin on kolmen vuoden takaa, joten eiköhän sen uskalla asentaa – varsinkin kun varmuuskopiot on hoidettu.