WordPressissä on helppo luoda kaikkea mahdollista, jopa isoja määriä kerralla, mutta isojen määrien poistaminen kerralla onkin kertaluokkaa hankalampaa. Useimmiten moinen massapoisto taitaa tulla vastaan kommenttien poistamisessa botti-invaasion jälkeen. Verkkokaupoissa, kuten Woocommercen kohdalla, vastaava voisi olla vanhojen ale-kuponkien poistaminen. Joskus on jopa tarve poistaa iso määrä käyttäjiä, varsinkin jos muuttaa sivuston luonnetta. WordPressin oma poisto on tuskaa, mutta onneksi avuksi tulee WP CLI. Tai lisäosa, mutta moisessa ei ole seksikkyyttä, tyyliä eikä tehokkuutta.
Monet kokemattomammat WordPressin käyttäjät kiroavat sydämensä pohjasta mahdollisuutta käsitellä vain 2o kohdetta kerralla. Tuolta osin löytyy helpotusta. Sivujen oikeasta yläkulmasta löytyy (usemmiten) kohta näyttöasetukset. Kun sen klikkaa auki, niin pystyy valitsemaan mitä kohteita sivulla näytetään (kuten artikkelien muokkauksessa tai työpöydän ohjausnäkymässä) tai kuinka monta kohdetta esitetään jollain luettelosivulla.
Valitettavasti siihen ei voi laittaa kuinka suurta määrää haluaa, vaan 999 on maksimi. Joskus sekin riittäisi. Ongelma on vain siinä, että moinen määrä toimii vain listauksessa, mutta jos yrität tehdä massana jotain, niin saat virheilmoituksen: Request-URI too long
(tai vastaava, riippuen serveristä).
Tämä johtuu siitä, että poistettavien nimet liitetään komentoon, ja silloin rotlasta tulee liian pitkä. Useimmiten tuosta selviää, kun laittaa näytettäväksi määräksi esimerkiksi 200. Tosin, kun poistin massana Woocommercen alennuskoodeja, niin 200 oli liian paljon – 50 toimi, mutta silloin minulla oli poistossa tusinan verran sivuja ja se sai ärsyyntymään (kyllä, olin jakanut aika paljon alekoodeja – liian paljon).
Tuohon löytyi ratkaisu kahdella tapaa. Joko asentaa (yllätysyllätys) lisäosan tai käyttää maanmainiota WP CLI -laajennusta. Kumpi ratkaisu on järkevämpi riippuu hieman tarpeesta, jonkun verran halusta oppia ja huomattavan paljon siitä missä ja miten WordPress-asennus on. WP CLI:n asentaminen ei pääsääntöisesti onnistu webhotelleissa, vaan vaatii virtuaaliserverin (yksi huomattavan vahva syy siirtyä VPS:n käyttäjäksi esim. DigitalOceanille). Maailmalla yhä useampi websivujen hostaaja, varsinkin isommat, tarjoavat jo WP CLI:n palvelun mukana, mutta en tiedä Suomen nykytilannetta. Kommentteihin voi vinkata josko joku yritys on jo päättänyt alkaa palvelemaan asiakkaitaan – muutama vuosi sitten WP CLI ei ollut vaihtoehto kotimaan markkinoilla.
Jos asennat lisäosan, niin tämä on nopealle etsimisellä käytännössä ainoa vaihtoehto. Omaa kokemusta sen käytöstä ei ole, kunhan asensin. Se tekee samat poistot kommentin tilan mukaan mikä onnistuu WP CLI:lläkin ja jos haluaa poistaa per kirjoittaja, niin sitten joutuu ostamaan maksullisen version.
https://fi.wordpress.org/plugins/wp-bulk-delete/
Riippuen vainoharhasi asteesta, niin päätät itse jätätkö sen asumaan asennukseesi vai poistatko käytön jälkeeen. Itse poistaisin, koska se on tehty nimenomaan massapoistoihin, eikä moinen operaatio saa olla arkipäivää. En nauti ajatuksesta, että joudun luottamaan päivästä toiseen lisäosasta, jonka mahdollistaa kaiken poistamisen. Todennäköisesti lisäosa on koodattu hyvin ja moinen pelko on todellakin ainakin asteen paranoijan puolella, mutta pääsääntöisesti hyvää politiikka on aina poistaa kokonaan lisäosat, joita ei käytä. Asentaa moisen uudestaan sitten myöhemmin, jos tarvetta tulee.
Yleistä WP CLI:stä
Teet mitä tahansa WP CLI:n kanssa, niin yksi käytäntö on hyvä opetella: tee aina ensin varmuuskopio tietokannasta. Siten saat palautettua systeemin, jos homma menee pieleen. WP CLI:llä varmuuskopiointi on niin helppoa, että sen tekemättä jättämiselle ei ole mitään perusteita.
Siirry aina ensin sivuston hakemistoon. Anna sen jälkeen:
wp db export tietokanta.sql
Voit nimetä tietokannan miten haluat.
Jos haluat palauttaa tietokannan, niin tällä se onnistuu:
wp db import tietokanta.sql
Kommenttien massapoisto
WP CLI on tehokas komentorivityökalu shellissä. Koska se on shellissä toimiva komentorivityökalu, niin tavalliselle käyttäjälle kynnys sen käyttöön on korkea. Pitäisi muistaa aina miten komento täytyy antaa. Yksi tapa on laittaa komentorimpsu aliaksena bashiin, mutta silloin sitä ei pääse muokkaamaan – sopii siis eräällä tavalla vakioasioille, kuten vaikka tietokannan kopioimiseen vakionimellä. Toinen tapa on Googlettaa tapaus kerrallaan. Minä käytän paljon Googlea (ja tätä sivustoa).
Kommenteillä on neljä tilaa, joiden mukaan kommentteja voi poistaa:
- hold (tarkastettavana)
- approve (hyväksytty)
- spam (roskaposti)
- trash (roskakorissa)
Jos komentaa
wp comment delete $(wp comment list --status=trash --format=ids) --force --quiet
niin poistaa kaikki roskiksessa olevat.
wp comment delete
on varsinainen ”poistokomento”. Koska komennolle täytyy antaa poistettavan kommentin ID (tai ID:t) eikä niitä ryhmäpoistossa oikein voi antaa, niin täytyy antaa muuttuja $
. Se määritellään suluissa olevalla toisella komennolla, jossa listataan roskokorissa olevat niiden ID:n mukaan. Lopussa oleva --force
pakottaa poiston, ilman sitä menee roskakoriin, ja --quiet
ei ilmoittele mitään. Jos haluat nähdä ruudulla, että poistot tosiaan tapahtuvat, niin älä anna --quiet
vipua.
Kommentoijan mukaan poisto
Minulla oli yli 43000 kommenttia, joista osa oli ActionSchedulerin ja iso osa Woocommercen jäljiltä. Kyse oli sivustosta, josta oli siirretty verkkokauppa omalle alidomainilleen ja siitä jää kaikkea roskaa.
ActionScheduler on Woocommerceen rakennettu taustalla toimiva asioita jonoon laittava palvelu. Osa lisäosista käyttää sitä, ainakin WooCommerce Subscriptions ja WooCommerce Follow-Ups – minulla oli jälkimmäinen asennettuna. Kannattaa heti alkuun ymmärtää, että kaikki mitkä mieletään jossain tapaa julkaistuksi jutuiksi, ovat kaikki artikkeleita, postauksia. Niitä vain kutsutaan eri nimillä, kuten podcast jne muut kustomit, mutta ne ovat kuitenkin artikkeita. Kommentit ovat oma juttunsa, ja aivan kaikki ostoihin liittyvä viestiliikenne, vaikka maksunvälittäjän ja kaupan välillä tain tilauksen tilan muutokset, ovat aidosti kommentteja. Kun niitä käyttänyt, ja normaalista kommentointilistasta piilottanut lisäosa, tässä Woocommerce, poistetaan, niin ne tulevat näkyviin kommentteina. Jos verkkokauppa on ollut aktiivinen, niin lista voi olla tukahduttavan pitkä.
Halusin niistä eroon.
Kommenttien poisto per kirjoittaja niin, että listataan poistettavien ID:ksi comment_author
ei toimi sellaisenaan. Se on nimittäin listauksen kenttää määrittelevä vipu, ei suodattava. Siihen tulee avuksi xargs
, jota en osaa käyttää. Onneksi joku muu osaa. Mutta ymmärtääkseni se toimii juurikin päinvastoin kuin useimmiten käytetty muoto <wp komento joka halutaa $(wp komento joka listaa muuttujat)
eli ensimmäinen wp-komento itseasiassa tekee muuttujat putkitusmerkin |
jälkeen olevalle xargs
jutulle.
Esimerkissä poistan ActionScheduleriin liittyvät kommentit:
wp comment list --field=ID --'post_author'='ActionScheduler' | xargs wp comment delete --force --allow-root
Lisäksi täytyy poistaa myös niihin liittyvät postaukset:
wp post list --field=ID --post_type=scheduled-action | xargs wp post delete --force
Ja jos niitä on poistettu tai peruttu, niin nekin on siivottava:
wp post list --field=ID --post_type=scheduled-action --post_status=trash | xargs wp post delete --force
wp post list --field=ID --post_type=scheduled-action --post_status=cancel | xargs wp post delete --force
WooCommerce
WooCommercen kommentteina näkyvä viestitys (tilamuutokset, maksunvälitys jne) on kirjoittajanimellä WooCommerce. Kun sen vaihtaa post_author
kohtaan, niin pitäisi hävitä siihen liittyvä liikenne. Paitsi että ei häviä, häviää aivan kaikki kommentit. Yksikään netistä löytämäni komentorotla ei toiminut. Joko ne eivät toimineen ollenkaan tai poistivat aivan kaiken.
Minulla oli niitä kaikkiaan 43 000 ja ne, sekä muutakin WooCommerceen liittyvää roskaa, joita en löytänyt, hidasti backendiä aivan tolkuttomasti
Tapeltuani asian kanssa riittävän pitkään, antauduin ja valitsin helpoimman tien – joka kannattaisi valita muutenkin.
Ennenkuin poistat WooCommercen, niin avaa wp-config.php
ja lisää sinne tämä:
define ( 'WC_REMOVE_ALL_DATA', true);
Poista nyt WooCommerce kokonaan lisäosista. Se raksuttaa hetken ja kun on valmis, niin voit poistaa wp-config.php
-tiedostosta ylläolevan.
Lopputuloksena kaikki kommenteissa näkyneet tuotteisiin ja tilauksiin liittyneet viestit ovat kadonneet. Ja kaupan päälle taustan hallinta nopeutui.
Poisto tietokannasta
wp comment delete
poistaa eräällä tavalla kuin käyttäjä suoraan hallinnasta. Tarkoittaa sitä, että jos poistettavia kommentteja on kymmeniä tuhansia, niin se vie hiemaan aikaa. Ei sentään tunneista puhuta, mutta muutama minuutti kuluu varmasti. Jos haluaa urakan hoidettavan silmänräpäyksellisen nopeasti, niin käsitellään suoraan tietokantaa. WP CLI mahdollistaa senkin.
Anna komento:
wp db query 'DELETE FROM wp_comments WHERE comment_approved = "spam"'
niin poistat kaikki roskapostiksi merkityt kommentit.
Koska wp comment delete
toimii kuin käyttäjä, niin WordPress myös käyttäytyy sen edellyttämällä tavalla ja kommentteja poistettaessa se poistaa myös kommentteihin liittyvät metatiedot, kuten vaikka Akismetin merkinnät. Kun poisto tehdään wp db query
komennolla suoraan tietokantaan, niin moista ei tehdä. Metatiedot joudutaan siten siivoamaan käsin.
Tämä poistaa kommenttien metatiedoista Akismetin merkinnät:
wp db query 'DELETE FROM wp_commentmeta WHERE meta_key LIKE "%akismet%"'
Jos et tyhjennä metatietoja, niin toki sivusto toimii, mutta tietokanta alkaa kasvamaan. Jossain vaiheessa siitä voi tulla niin suuri, että se alkaa hidastamaan.
Itse olen hieman arka käsittelemään tietokantaa WP CLI:llä ja se johtunee vain pelonsekaisesta kunnioituksesta komentorivien kryptisyyttä ja tehokkuuta kohtaan. Tai sitten olen vain liian piintynyt Windows-käyttäjä ja haluan graafisuutta. Siksi kajoan tietokantaan mieluummin phpMyAdmin tai Adminer -ohjelmilla.
Kaikki kommentit häviävät näin:
Valitse kentät wp_commentmeta
ja wp_comment
sekä sen jälkeen valitse Empty
tyhjentääksesi ne. Aikaa kuuluu noin sekunti. Jos olet wp-config.php
-tiedostossa antanut jonkun muun prefiksin tietokantaan, niin wp_
korvaantuu sillä.
Entä jos haluatkin poistaa vain kommenttispämmin tietokantaa näpelöimällä? Onnea matkaan, sillä minulla ei ole hajuakaan miten se tehtäisiin. Olen aivan surkea sql-komentojen kanssa.