
🗑 WooCommerce'i toodete ja atribuutide hulgikustutamine: SQL, WP-CLI ja pluginad
Avate WooCommerce administraatori paneeli ja näete kolme tuhandet toodet, pooled neist on rikutud impordi tõttu duplikaadid, atribuutidega nagu „Color 1", „Color 2", „Size_copy_2023". „Tooted → vali kõik → Kustuta" liides aegub pärast esimest paarisadat. Tundub tuttav? Hulgi kataloogi puhastamine on ülesanne, millega puutub kokku igaüks, kes poe migreerib, arendusandmebaasi tootmisega ühendab või poe pärast brändiuuendust taasavab.
Probleemi tuum on WooCommerce'i ülesehituses: tooted on jaotatud nelja tabeli vahel (wp_posts, wp_postmeta, wp_term_relationships ja wp_term_taxonomy) ning atribuudid on salvestatud veel kolmes. Ei saa lihtsalt vajutada „Kustuta kõik"; mootor jookseb kokku enne, kui nimekirja lõppu jõuab. Teil on vaja tööriista, mis liidesest mööda läheb ja otse andmebaasi poole pöördub või CLI kaudu töötab.
Allpool on kolm toimivat meetodit, alates radikaalsest SQL-ist kuni turvaliste pluginateni. Varukoopiaga, prefiksi kontrolliga ja arusaamaga, mis igas tabelis täpselt toimub.
💡 Kiirülevaade:
- Tehke täielik andmebaasi tõmmis;
DELETEon pöördumatu, prügikasti ei ole - Kontrollige tabeli prefiksit failis
wp-config.phpja asendage sellegawp_ - Käivitage SQL-käsud kaskaad-järjekorras: atribuudid → tooted → orvuks jäänud postmeta
- Kui teil on SSH, siis WP-CLI teeb selle ühe käsuga ja käivitab vajalikud konksud
- Tootmiskeskkonna poe puhul, kus SQL-kogemus puudub, on „Kustuta" nupuga pluginad turvalisemad
Ettevaatusabinõud: varukoopia ja prefiks
Iga SQL-käsk, mis muudab WordPressi tabelite sisu, on pöördumatu. DELETE ei küsi kinnitust, ei saada kirjet prügikasti; rida kaob koheselt ja jäädavalt. Reegel number üks: tehke enne allolevate päringute käivitamist täielik andmebaasi varukoopia.
Kõige usaldusväärsem viis on eksportida tõmmis phpMyAdmini kaudu: vahekaart „Ekspordi" → SQL-vorming → paki gzip-iga. Või majutuspaneeli kaudu (cPanel → Varundus → Andmebaas). Neile, kes töötavad käsurealt:
1 mysqldump -u username -p database_name > backup_$(date +%Y%m%d).sql
Teine punkt: kõik allolevad päringud kasutavad standardset wp_ prefiksit. Kui muutsite WordPressi paigaldamise ajal prefiksi näiteks wpx_, store_ või millekski muuks, asendage wp_ igas käsus enda omaga. Tegelik prefiks on failis wp-config.php, real $table_prefix. Kontrollitud? Nüüd asume asja kallale.
Meetod 1: SQL-käsud phpMyAdminis, täielik kontroll
Kiireim ja radikaalseim meetod. Sobib kõige paremini, kui on vaja ühe korraga kustutada sadu või tuhandeid kirjeid ja tavaline WooCommerce'i liides aegub. Kõik päringud käivitatakse phpMyAdminis vahekaardil „SQL", ükshaaval, ranges järjekorras.
WooCommerce'i atribuutide kustutamine
Atribuudid asuvad korraga kolmes tabelis: wp_terms, wp_term_taxonomy ja wp_term_relationships. Need erinevad tavalistest kategooriatest ja siltidest pa_ prefiksi poolest väljal taxonomy, mis on lühend sõnast „product attribute". Peate need kustutama kaskaadina, alustades terminitest ja lõpetades seostega:
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);
Esimene päring kustutab atribuutide nimed tabelist wp_terms. Teine eemaldab nende taksonoomia kirjed tabelist wp_term_taxonomy. Kolmas puhastab orvuks jäänud „termin-objekt" seosed tabelist wp_term_relationships, mis jäid ilma vanemtaksonoomiata. Järjekord on oluline: kui kustutate taksonoomia enne termineid, haarab kolmas päring liiga palju.
WooCommerce'i toodete kustutamine
Tooted ja nende variatsioonid on kirjed tüübiga product ja product_variation tabelis wp_posts. Kuid pelgalt ridade kustutamisest wp_posts-ist ei piisa: metaandmed jäävad tabelisse wp_postmeta (hind, SKU, tarne seaded) ja terminiseosed jäävad tabelisse wp_term_relationships (kategooriad, sildid). Kolm päringut, kaskaadina:
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');
Kõigepealt katkestame toote seosed taksonoomiatega, seejärel kustutame metaandmed ja alles seejärel toote kirje enda. Kui pöörate järjekorra ümber ja kustutate kõigepealt wp_posts, tagastavad alam-päringud SELECT ID FROM wp_posts teises ja kolmandas etapis tühja hulga ning metaandmed ja seosed jäävad andmebaasi surnud raskusena alles.
Orvuks jäänud postmeta puhastamine
Pärast mis tahes kustutustoiminguid SQL-i kaudu tasub kontrollida, kas wp_postmeta sisaldab ridu, mis viitavad olematutele postitustele. See juhtub katkenud tehingute, rikutud importide või siis, kui postitusi kustutati ilma kaskaadita:
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;
Päring leiab kõik wp_postmeta read, millel pole vanemkirjet tabelis wp_posts, ja kustutab need. See on ohutu: see ei puuduta elavaid andmeid, ainult prügi.
Meetod 2: WP-CLI, kiire ja ilma phpMyAdminita
Kui teil on serverisse SSH-juurdepääs, teeb WP-CLI hulgikustutamise elegantsemalt kui ükski SQL-päring. Üks käsk ja WooCommerce käib ise seotud tabelid läbi, jätmata maha orvuks jäänud andmeid:
1 wp wc product delete $(wp wc product list --field=ID --per_page=-1) --force
Lipp --per_page=-1 ekspordib kõigi toodete ID-d ilma lehekülgede kaupa jaotamiseta. --force jätab prügikasti vahele ja kustutab jäädavalt. Kui teil on üle 10 000 toote, on parem jagada 500 kaupa partiideks, et vältida mälulimiitide tabamist:
1 wp wc product list --field=ID --per_page=500 --page=1 | xargs wp wc product delete --force
Atribuutide kustutamiseks WP-CLI kaudu kasutage:
1 wp wc product_attribute list --field=id --per_page=-1 | xargs -I{} wp wc product_attribute delete {} --force
WP-CLI peamine eelis toore SQL-i ees on see, et see käivitab WooCommerce'i sisemised konksud, before_delete_post ja after_delete_post. See annab vahemälu- ja otsingupluginatel (Elasticsearch, Redis, Relevanssi) võimaluse oma indeksid koristada. SQL-päringud seda ei tee; pärast neid võib otsing mõnda aega juba kustutatud tooteid tagastada.
Meetod 3: pluginad, kui te ei taha andmebaasi puutuda
Neile, kes peavad käsurida ja phpMyAdmini liiga riskantseks, pakub turg spetsiaalseid pluginaid. Need töötavad samade SQL-päringute peal, kuid peidavad need nupu taha.
Delete All Products for WooCommerce on tasuta plugin ametlikust WordPress.org repositooriumist. See lisab adminpaneelile üheainsa nupu. Klõps → vali „liiguta prügikasti" või „lõplikult" → kinnita. Minimaalselt samme, null riski SQL-i trükivea ees. Puudus: see töötab ainult toodetega, atribuute see ei puuduta.
WooCommerce Store Toolkit (tuntud ka kui Store Toolkit for WooCommerce) on tõsisem variant. See koristab lisaks toodetele ja atribuutidele ka tellimusi, kuponge, sessioone ja transient-andmeid, filtritega kuupäeva ja staatuse järgi. Sobib poe täielikuks süvapuhastuseks enne taasavamist.
Ükskõik millise plugina te valite, varundamise reegel kehtib endiselt. Plugin käivitab samu DELETE päringuid; te lihtsalt ei näe neid.
Meetodite võrdlus: mida ja millal valida
Meetod | Kiirus | Turvalisus | Paindlikkus | Mõeldud kellele |
|---|---|---|---|---|
SQL phpMyAdminis | Hetkeline | Madal, puudub kaitse vigade eest | Täielik kontroll tabelite üle | Arendajad, serveriadministraatorid |
WP-CLI | Kiire, sekundid | Kõrge, konksud ja kaskaadid | Mugavad lipud ja lehitsemine | Arendajad, DevOps |
Pluginad | Aeglane, sadu minute kohta | Maksimaalne, kasutajaliidese põhine | Piiratud plugina funktsionaalsusega | Poe omanikud |
Kui teil on üks toode või kümmekond, siis WooCommerce'i liides „Tooted → vali → Kustuta" teeb töö ära. Sajad või tuhanded nõuavad SQL-i või WP-CLI-d. Töötav tootmispood, kus pole ruumi eksimusteks, nõuab pluginat või WP-CLI-d.
Olulised piirangud: mida ei kustutata
Toodete ja atribuutide hulgikustutamine SQL-i kaudu ei puuduta meediafaile. WordPressi meediateeki üles laaditud tootepildid (kirjed, kus post_type = 'attachment') jäävad alles nii failisüsteemis kui ka andmebaasis. Kui ehitate kataloogi nullist üles ja soovite oma hostingus ruumi vabastada, tuleb meediafailid eraldi puhastada: jaotise „Meedia → vali → Kustuta jäädavalt" või WP-CLI kaudu:
1 wp post delete $(wp post list --post_type=attachment --field=ID --per_page=-1) --force
SQL-käsud ei uuenda ka WooCommerce'i loendureid (toodete arv kategooriate kaupa), mis on vahemällu salvestatud wp_termmeta ja wp_options tabelites transientidena eesliitega _wc_term_counts_. Pärast hulgikustutamist võib administraatori paneel ajutiselt näidata valesid toodete arve kategooriate kaupa. See parandatakse ülelugemisega:
1 wp wc tool run recount_terms
Või repositooriumis saadaval oleva Recount Terms pluginaga.
Video pakub samm-sammult ülevaadet SQL-käskudest WooCommerce'i atribuutide kustutamiseks phpMyAdminis: tabelites navigeerimine ja tulemuste kontrollimine pärast iga päringut.
⁉️🤔 Korduma kippuvad küsimused
Kas SQL-i kaudu toodete kustutamine on elavas poes ohutu?
Tootmiskeskkonnas on toore SQL-i kasutamine hulgikustutamiseks riskantne praktika. Üksainus kirjaviga tabeli nimes või
WHEREklauslis võib mõjutada tellimusi, kasutajaid või seadeid. Kui pood on aktiivne ja teenib tulu, kasutage WP-CLI-d või pluginaid, mis ei lase teil endale jalga tulistada. Jätke SQL arenduskeskkondade, testimisserverite ja olukordade jaoks, kus administraatori liides juba ei lae.
Miks on tooted pärast SQL-iga kustutamist saidiotsingus endiselt nähtaval?
Otsingupluginad (Relevanssi, Elasticsearch, SearchWP) hoiavad omaenda indeksit, mida ei uuendata, kui
wp_poststabelit otse manipuleeritakse, minnes mööda WordPressi API-st. Pärast SQL-iga puhastamist peate otsinguindeksi pluginaseadetes või WP-CLI kaudu uuesti üles ehitama: näitekswp relevanssi index --reindex.
Kuidas kustutada tooteid ainult kindlast kategooriast, mitte kõiki?
Lisage filter soovitud kategooria
term_taxonomy_idjärgi. Lähenemine: hankige kategooriaterm_id→ leidketerm_taxonomy_idtabelistwp_term_taxonomy→ filtreerigeobject_idtabeliswp_term_relationshipsennewp_poststabelist kustutamist. Praktikas on lihtsam kasutada WP-CLI-d:wp wc product list --category=slug-kategorii --field=ID | xargs wp wc product delete --force.
Kas tooteid saab pärast SQL-iga kustutamist taastada?
Ainult varukoopiast. Erinevalt WordPressi prügikasti kaudu kustutamisest (Teisalda prügikasti) kustutab SQL-i
DELETEkäsk read füüsiliselt ja pöördumatult. Just seepärast korratakse reeglit „kõigepealt varukoopia" selle artikli igas osas. Kaks minutit tõmmise tegemisele säästab tunde taastamisele.
Mis vahe on atribuutide ja variatsioonide kustutamisel?
Variatsioonid on toodete alamtüüp (
product_variation). Need kustutatakse samade SQL-käskudega nagu lihttooted: tingimuspost_type IN ('product','product_variation')„Meetodi 1" teises plokis hõlmab juba variatsioone. Atribuudid (pa_color,pa_size) on taksonoomiad; need kustutatakse eraldi, esimese SQL-käskude plokiga. Õige järjekord on: kõigepealt tooted (sh variatsioonid), seejärel atribuudid. Kui teha vastupidi, kaotavad variatsioonid oma atribuudiseosed, kuid variatsioonikirjed ise jäävad andmebaasi alles.
Mida kasutada aastal 2026: kokkuvõte
SQL-käsud, WP-CLI ja pluginad on kolm erineva riskitasemega tööriista ühe ülesande jaoks. Valik taandub lihtsale maatriksile:
- Teil on SSH ja käsurea kogemus → WP-CLI (
wp wc product delete). Ohutu, kiire, konksudega. - SSH-d pole, kuid on phpMyAdmin ja mõistate tabeliskeemi → SQL. Täielik kontroll, kohesed tulemused. Kuid kõigepealt varukoopia.
- Te ei soovi mingit riski → Delete All Products või Store Toolkit. Aeglasem, kuid nupp SQL-päringu asemel.
Iga stsenaariumi korral on andmebaasi varukoopia esimene tegevus. Ärge alustage ilma selleta.
🔗 Delete All Products for WooCommerce, tasuta WordPress.org-is🔗 WooCommerce Store Toolkit, põhjalik poe puhastus



