
🗑 WooCommerce-tuotteiden ja -attribuuttien massapoisto: SQL, WP-CLI ja lisäosat
Avaat WooCommerce-hallintapaneelin ja näet kolme tuhatta tuotetta, joista puolet on kaksoiskappaleita epäonnistuneesta tuonnista, ja attribuutteina on "Color 1", "Color 2", "Size_copy_2023". "Tuotteet → valitse kaikki → Poista" -käyttöliittymä aikakatkaisee parin ensimmäisen sadan jälkeen. Kuulostaako tutulta? Massatuoteluettelon siivous on tehtävä, joka tulee vastaan aina, kun verkkokauppaa siirretään, staging-tietokantaa yhdistetään tuotantoon tai kauppapaikka avataan uudelleen brändiuudistuksen jälkeen.
Ongelma juontuu WooCommercen rakenteesta: tuotteet on hajautettu neljään tauluun (wp_posts, wp_postmeta, wp_term_relationships ja wp_term_taxonomy), ja attribuutit on tallennettu kolmeen muuhun. Et voi vain klikata "Poista kaikki"; moottori kaatuu ennen kuin se pääsee listan loppuun. Tarvitset työkalun, joka ohittaa käyttöliittymän ja iskee suoraan tietokantaan tai toimii komentorivin kautta.
Alla on kolme toimivaa tapaa, radikaalista SQL:stä turvallisiin lisäosiin. Varmuuskopion, etuliitetarkistusten ja sen ymmärryksen kera, mitä kussakin taulussa tarkalleen tapahtuu.
💡 Pikaohje:
- Ota täydellinen tietokantavedos;
DELETEon peruuttamaton, roskakoria ei ole - Tarkista taulun etuliite tiedostosta
wp-config.phpja korvaa silläwp_ - Suorita SQL-komennot ketjutusjärjestyksessä: attribuutit → tuotteet → orvot postmeta-rivit
- Jos sinulla on SSH-yhteys, WP-CLI hoitaa asian yhdellä komennolla ja käynnistää tarvittavat koukut
- Tuotantokaupassa, jossa ei ole SQL-kokemusta, lisäosat, joissa on "Poista"-painike, ovat turvallisempia
Varotoimet: varmuuskopio ja etuliite
Mikä tahansa SQL-komento, joka muuttaa WordPress-taulujen sisältöä, on peruuttamaton. DELETE ei kysy vahvistusta, ei lähetä tietuetta roskakoriin; rivi katoaa välittömästi ja pysyvästi. Sääntö numero yksi: ota täydellinen tietokantavarmuuskopio ennen kuin suoritat mitään alla olevista kyselyistä.
Luotettavin tapa on viedä vedos phpMyAdminin kautta: "Vienti"-välilehti → SQL-muoto → pakkaa gzipillä. Tai hosting-paneelin kautta (cPanel → Backup → Database). Niille, jotka työskentelevät komentoriviltä:
1 mysqldump -u username -p database_name > backup_$(date +%Y%m%d).sql
Toinen seikka: kaikki alla olevat kyselyt käyttävät vakio-wp_-etuliitettä. Jos vaihdoit etuliitteen WordPress-asennuksen yhteydessä muotoon wpx_, store_ tai johonkin muuhun, korvaa wp_ jokaisessa komennossa omallasi. Todellinen etuliite löytyy tiedostosta wp-config.php, riviltä $table_prefix. Tarkistettu? Siirrytään nyt itse asiaan.
Tapa 1: SQL-komennot phpMyAdminissa, täysi hallinta
Nopein ja radikaalein tapa. Sopii parhaiten, kun sinun on pyyhittävä satoja tai tuhansia tietueita kerralla ja tavallinen WooCommerce-käyttöliittymä aikakatkaisee. Kaikki kyselyt suoritetaan phpMyAdminissa "SQL"-välilehdellä, yksi kerrallaan, tiukassa järjestyksessä.
WooCommerce-attribuuttien poistaminen
Attribuutit sijaitsevat kolmessa taulussa samanaikaisesti: wp_terms, wp_term_taxonomy ja wp_term_relationships. Ne eroavat tavallisista kategorioista ja avainsanoista pa_-etuliitteen perusteella taxonomy-kentässä, joka on lyhenne sanoista "product attribute". Sinun on poistettava ne ketjussa, aloittaen termeistä ja päättäen suhteisiin:
1 DELETE FROM wp_terms WHERE term_id IN 2 (SELECT term_id FROM wp_term_taxonomy WHERE taxonomy LIKE 'pa_%'); 3 4 DELETE FROM wp_term_taxonomy WHERE taxonomy LIKE 'pa_%'; 5 6 DELETE FROM wp_term_relationships WHERE term_taxonomy_id NOT IN 7 (SELECT term_taxonomy_id FROM wp_term_taxonomy);
Ensimmäinen kysely poistaa attribuuttien nimet taulusta wp_terms. Toinen poistaa niiden taksonomiatietueet taulusta wp_term_taxonomy. Kolmas siivoaa orvot "termi-objekti"-suhteet taulusta wp_term_relationships, jotka jäivät ilman ylätaksonomiaa. Järjestyksellä on väliä: jos poistat taksonomian ennen termejä, kolmas kysely nappaa liikaa.
WooCommerce-tuotteiden poistaminen
Tuotteet ja niiden variaatiot ovat tietueita, joiden tyyppi on product ja product_variation taulussa wp_posts. Pelkkä rivien pyyhkiminen taulusta wp_posts ei kuitenkaan riitä: metadata jää tauluun wp_postmeta (hinta, SKU, toimitusasetukset) ja termisuhteet jäävät tauluun wp_term_relationships (kategoriat, avainsanat). Kolme kyselyä, ketjutettuna:
1 DELETE FROM wp_term_relationships WHERE object_id IN 2 (SELECT ID FROM wp_posts WHERE post_type IN ('product','product_variation')); 3 4 DELETE FROM wp_postmeta WHERE post_id IN 5 (SELECT ID FROM wp_posts WHERE post_type IN ('product','product_variation')); 6 7 DELETE FROM wp_posts WHERE post_type IN ('product','product_variation');
Ensin katkaisemme tuotteen suhteet taksonomioihin, sitten poistamme metadatan ja vasta sen jälkeen itse tuotetietueen. Jos käännät järjestyksen ja poistat wp_posts-taulun ensin, toisen ja kolmannen vaiheen alikyselyt SELECT ID FROM wp_posts palauttavat tyhjän joukon, ja metadata ja suhteet jäävät kuolleena painona tietokantaan.
Orpojen postmeta-rivien siivoaminen
Kaikkien SQL-poistotoimien jälkeen kannattaa tarkistaa, sisältääkö wp_postmeta rivejä, jotka viittaavat olemattomiin kirjoituksiin. Näin käy keskeytyneiden transaktioiden, rikkinäisten tuontien yhteydessä tai kun kirjoituksia on poistettu ilman ketjutusta:
1 DELETE pm 2 FROM wp_postmeta pm 3 LEFT JOIN wp_posts wp ON wp.ID = pm.post_id 4 WHERE wp.ID IS NULL;
Kysely etsii kaikki wp_postmeta-rivit, joilla ei ole ylätietuetta taulussa wp_posts, ja poistaa ne. Se on turvallinen: se ei koske elävään dataan, ainoastaan roskaan.
Tapa 2: WP-CLI, nopea ja ilman phpMyAdminia
Jos sinulla on SSH-yhteys palvelimelle, WP-CLI hoitaa massapoiston tyylikkäämmin kuin mitkään SQL-kyselyt. Yksi komento, ja WooCommerce käy läpi liittyvät taulut itse, jättämättä orpoa dataa jälkeensä:
1 wp wc product delete $(wp wc product list --field=ID --per_page=-1) --force
--per_page=-1-lippu vie kaikkien tuotteiden ID:t ilman sivutusta. --force ohittaa roskakorin ja poistaa pysyvästi. Jos sinulla on yli 10 000 tuotetta, on parempi jakaa 500:n eriin muistirajojen ylittymisen välttämiseksi:
1 wp wc product list --field=ID --per_page=500 --page=1 | xargs wp wc product delete --force
Poistaaksesi attribuutit WP-CLI:n kautta, käytä:
1 wp wc product_attribute list --field=id --per_page=-1 | xargs -I{} wp wc product_attribute delete {} --force
WP-CLI:n tärkein etu suoraan SQL:ään verrattuna on, että se laukaisee WooCommercen sisäiset koukut, before_delete_post ja after_delete_post. Tämä antaa välimuisti- ja hakuliitännäisille (Elasticsearch, Redis, Relevanssi) mahdollisuuden siivota omat indeksinsä. SQL-kyselyt eivät tee tätä; niiden jälkeen haku saattaa vielä jonkin aikaa palauttaa jo poistettuja tuotteita.
Tapa 3: liitännäiset, kun et halua koskea tietokantaan
Niille, jotka pitävät komentoriviä ja phpMyAdminia liian riskialttiina, markkinoilla on tarjolla erikoisliitännäisiä. Ne toimivat samojen SQL-kyselyjen päällä, mutta piilottavat ne napin taakse.
Delete All Products for WooCommerce on ilmainen liitännäinen virallisesta WordPress.org-hakemistosta. Se lisää hallintapaneeliin yhden napin. Klikkaa → valitse "siirrä roskakoriin" tai "pysyvästi" → vahvista. Minimimäärä vaiheita, nolla riskiä SQL-kirjoitusvirheelle. Huono puoli: se toimii vain tuotteilla, ei koske attribuutteihin.
WooCommerce Store Toolkit (tunnetaan myös nimellä Store Toolkit for WooCommerce) on vakavampi vaihtoehto. Se siivoaa tuotteiden ja attribuuttien lisäksi myös tilaukset, kupongit, istunnot ja transientit, ja siinä on suodattimet päivämäärän ja tilan mukaan. Sopii kaupan täydelliseen syväpuhdistukseen ennen uudelleenjulkaisua.
Riippumatta siitä, minkä liitännäisen valitset, varmuuskopiointisääntö pätee yhä. Liitännäinen ajaa samat DELETE-kyselyt; sinä et vain näe niitä.
Menetelmien vertailu: mitä valita ja milloin
Menetelmä | Nopeus | Turvallisuus | Joustavuus | Tarkoitettu |
|---|---|---|---|---|
SQL phpMyAdminissa | Välitön | Matala, ei suojaa virheiltä | Täysi hallinta tauluista | Kehittäjät, palvelimen ylläpitäjät |
WP-CLI | Nopea, sekunteja | Korkea, koukut ja ketjutus | Kätevät liput ja sivutus | Kehittäjät, DevOps |
Liitännäiset | Hidas, satoja minuutissa | Maksimaalinen, käyttöliittymäpohjainen | Rajoitettu liitännäisen toimintoihin | Kaupan omistajat |
Jos sinulla on yksi tuote tai tusina, WooCommercen käyttöliittymän "Tuotteet → valitse → Poista" hoitaa homman. Sadat tai tuhannet vaativat SQL:ää tai WP-CLI:tä. Tuotannossa oleva live-kauppa, jossa virheille ei ole tilaa, vaatii liitännäisen tai WP-CLI:n.
Tärkeät rajoitukset: mitä ei poisteta
Tuotteiden ja attribuuttien massapoisto SQL:llä ei koske mediatiedostoja. WordPressin mediakirjastoon ladatut tuotekuvat (tietueet, joissa post_type = 'attachment') säilyvät paikoillaan sekä tiedostojärjestelmässä että tietokannassa. Jos rakennat katalogia alusta alkaen uudelleen ja haluat vapauttaa tilaa palvelimellasi, mediatiedostot on siivottava erikseen: kohdasta "Media → valitse → Poista pysyvästi" tai WP-CLI:llä:
1 wp post delete $(wp post list --post_type=attachment --field=ID --per_page=-1) --force
SQL-komennot eivät myöskään päivitä WooCommercen laskureita (tuotemääriä kategorioittain), jotka on välimuistitettu wp_termmeta- ja wp_options-tauluihin transientteina _wc_term_counts_-etuliitteellä. Massapoiston jälkeen hallintapaneeli saattaa näyttää tilapäisesti virheellisiä tuotemääriä kategorioittain. Tämä korjataan uudelleenlaskennalla:
1 wp wc tool run recount_terms
Tai Recount Terms -lisäosan avulla repositoriosta.
Video näyttää vaihe vaiheelta, miten WooCommerce-attribuutteja poistetaan SQL-komennoilla phpMyAdminissa: tauluissa liikkuminen ja tulosten tarkistaminen jokaisen kyselyn jälkeen.
⁉️🤔 Usein kysytyt kysymykset
Onko tuotteiden poistaminen SQL:llä turvallista live-kaupassa?
Tuotantokaupassa raa'an SQL:n käyttö massapoistoon on riskialtis käytäntö. Yksi kirjoitusvirhe taulun nimessä tai
WHERE-ehdossa voi vaikuttaa tilauksiin, käyttäjiin tai asetuksiin. Jos kauppa on toiminnassa ja tuottaa liikevaihtoa, käytä WP-CLI:tä tai lisäosia, jotka eivät anna sinun ampua itseäsi jalkaan. Säästä SQL kehitysympäristöihin, stagingiin ja tilanteisiin, joissa hallintaliittymä ei enää lataudu.
Miksi tuotteet näkyvät yhä sivuston haussa SQL-poiston jälkeen?
Hakulisäosat (Relevanssi, Elasticsearch, SearchWP) ylläpitävät omaa indeksiään, jota ei päivitetä, kun
wp_posts-taulua käsitellään suoraan WordPressin API:n ohi. SQL-siivouksen jälkeen sinun on rakennettava hakuindeksi uudelleen lisäosan asetuksissa tai WP-CLI:llä: esimerkiksiwp relevanssi index --reindex.
Miten poistan tuotteet vain tietystä kategoriasta, en kaikkia?
Lisää suodatin halutun kategorian
term_taxonomy_id:n perusteella. Lähestymistapa: hae kategorianterm_id→ etsiterm_taxonomy_idtaulustawp_term_taxonomy→ suodataobject_idtaulussawp_term_relationshipsennen poistamistawp_posts-taulusta. Käytännössä on helpompaa käyttää WP-CLI:tä:wp wc product list --category=slug-kategorii --field=ID | xargs wp wc product delete --force.
Voiko tuotteita palauttaa SQL-poiston jälkeen?
Vain varmuuskopiosta. Toisin kuin poisto WordPressin roskakorin kautta (Siirrä roskakoriin), SQL:n
DELETE-komento poistaa rivit fyysisesti ja peruuttamattomasti. Juuri tästä syystä "varmuuskopioi ensin" -sääntö toistetaan tämän artikkelin jokaisessa osiossa. Kaksi minuuttia dumpin ottamiseen säästää tunteja palauttamisessa.
Mitä eroa on attribuuttien poistamisella ja variaatioiden poistamisella?
Variaatiot ovat tuotteiden alatyyppi (
product_variation). Ne poistetaan samoilla SQL-komennoilla kuin yksinkertaiset tuotteet: ehtopost_type IN ('product','product_variation')"Menetelmän 1" toisessa lohkossa sisältää jo variaatiot. Attribuutit (pa_color,pa_size) ovat taksonomioita; ne poistetaan erikseen, ensimmäisellä SQL-komentolohkolla. Oikea järjestys on: ensin tuotteet (mukaan lukien variaatiot), sitten attribuutit. Jos teet päinvastoin, variaatiot menettävät attribuuttisidoksensa, mutta variaatiotietueet itse jäävät tietokantaan.
Mitä käyttää vuonna 2026: lopputulos
SQL-komennot, WP-CLI ja lisäosat ovat kolme eri riskitason työkalua yhteen tehtävään. Valinta tiivistyy yksinkertaiseen matriisiin:
- Sinulla on SSH ja komentorivikokemusta → WP-CLI (
wp wc product delete). Turvallinen, nopea, koukuilla. - Ei SSH:ta, mutta sinulla on phpMyAdmin ja ymmärrät tauluskeeman → SQL. Täysi hallinta, välittömät tulokset. Mutta varmuuskopioi ensin.
- Et halua minkäänlaista riskiä → Delete All Products tai Store Toolkit. Hitaampi, mutta nappi SQL-kyselyn sijaan.
Kaikissa skenaarioissa tietokannan varmuuskopiointi on toimenpide numero yksi. Älä aloita ilman sitä.
🔗 Delete All Products for WooCommerce, ilmainen WordPress.orgissa🔗 WooCommerce Store Toolkit, edistynyt kaupan siivous



