Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

🗑 WooCommerce'i toodete ja atribuutide hulgikustutamine: SQL, WP-CLI ja pluginad

🗑 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; DELETE on pöördumatu, prügikasti ei ole
  • Kontrollige tabeli prefiksit failis wp-config.php ja asendage sellega wp_
  • 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:

1mysqldump -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:

1DELETE FROM wp_terms WHERE term_id IN
2(SELECT term_id FROM wp_term_taxonomy WHERE taxonomy LIKE 'pa_%');
3
4DELETE FROM wp_term_taxonomy WHERE taxonomy LIKE 'pa_%';
5
6DELETE 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:

1DELETE FROM wp_term_relationships WHERE object_id IN
2(SELECT ID FROM wp_posts WHERE post_type IN ('product','product_variation'));
3
4DELETE FROM wp_postmeta WHERE post_id IN
5(SELECT ID FROM wp_posts WHERE post_type IN ('product','product_variation'));
6
7DELETE 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:

1DELETE pm
2FROM wp_postmeta pm
3LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
4WHERE 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:

1wp 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:

1wp wc product list --field=ID --per_page=500 --page=1 | xargs wp wc product delete --force

Atribuutide kustutamiseks WP-CLI kaudu kasutage:

1wp 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:

1wp 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:

1wp 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 WHERE klauslis 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_posts tabelit 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äiteks wp relevanssi index --reindex.

Kuidas kustutada tooteid ainult kindlast kategooriast, mitte kõiki?

Lisage filter soovitud kategooria term_taxonomy_id järgi. Lähenemine: hankige kategooria term_id → leidke term_taxonomy_id tabelist wp_term_taxonomy → filtreerige object_id tabelis wp_term_relationships enne wp_posts tabelist 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 DELETE kä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: tingimus post_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