
🗑 Massesletting av WooCommerce-produkter og attributter: SQL, WP-CLI og utvidelser
Du åpner WooCommerce-administrasjonspanelet og ser tre tusen produkter, halvparten duplikater fra en mislykket import, med attributter som «Color 1», «Color 2», «Size_copy_2023». Grensesnittet «Produkter → velg alle → Slett» får tidsavbrudd etter de første par hundre. Høres det kjent ut? Masseopprydding av katalog er en oppgave alle møter ved migrering av en butikk, sammenslåing av en staging-database med produksjon, eller relansering av en butikkfront etter en omprofilering.
Problemet bunner i hvordan WooCommerce er bygget opp: produkter er spredt over fire tabeller (wp_posts, wp_postmeta, wp_term_relationships og wp_term_taxonomy), og attributter er lagret i tre til. Du kan ikke bare klikke «Slett alle»; motoren vil krasje før den når slutten av listen. Du trenger et verktøy som omgår grensesnittet og treffer databasen direkte, eller som jobber via CLI.
Nedenfor finner du tre fungerende metoder, fra radikal SQL til trygge utvidelser. Med en sikkerhetskopi, med prefikssjekker og med forståelse for hva som nøyaktig skjer i hver tabell.
💡 Rask oversikt:
- Ta en full databasedump;
DELETEer irreversibelt, det finnes ingen papirkurv - Sjekk tabellprefikset i
wp-config.phpog bytt det ut medwp_ - Kjør SQL-kommandoene i kaskaderekkefølge: attributter → produkter → foreldreløs postmeta
- Har du SSH, håndterer WP-CLI det i én enkelt kommando og fyrer av de nødvendige krokene
- For en produksjonsbutikk uten SQL-erfaring er utvidelser med en «Slett»-knapp tryggere
Forholdsregler: sikkerhetskopi og prefiks
Enhver SQL-kommando som endrer innholdet i WordPress-tabeller er irreversibel. DELETE spør ikke om bekreftelse, sender ikke posten til papirkurven; raden forsvinner øyeblikkelig og permanent. Regel nummer én: ta en full databasesikkerhetskopi før du kjører noen av spørringene nedenfor.
Den mest pålitelige tilnærmingen er å eksportere en dump via phpMyAdmin: fanen «Eksport» → SQL-format → komprimer med gzip. Eller via vertskontrollpanelet ditt (cPanel → Sikkerhetskopi → Database). For dem som jobber fra kommandolinjen:
1 mysqldump -u username -p database_name > backup_$(date +%Y%m%d).sql
Andre punkt: alle spørringer nedenfor bruker standardprefikset wp_. Hvis du endret prefikset under WordPress-installasjonen til wpx_, store_ eller noe annet, bytt ut wp_ i hver kommando med ditt. Det faktiske prefikset står i wp-config.php, på linjen $table_prefix. Sjekket? La oss sette i gang.
Metode 1: SQL-kommandoer i phpMyAdmin, full kontroll
Den raskeste og mest radikale metoden. Best egnet når du trenger å fjerne hundrevis eller tusenvis av poster i én enkelt operasjon og standard WooCommerce-grensesnitt får tidsavbrudd. Alle spørringer kjøres i phpMyAdmin på «SQL»-fanen, én om gangen, i streng rekkefølge.
Slette WooCommerce-attributter
Attributter lever i tre tabeller samtidig: wp_terms, wp_term_taxonomy og wp_term_relationships. De skiller seg fra vanlige kategorier og stikkord ved pa_-prefikset i taxonomy-feltet, forkortelse for «product attribute». Du må slette dem i kaskade, start med termer og avslutt med relasjoner:
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);
Den første spørringen sletter attributtnavn fra wp_terms. Den andre fjerner taksonomipostene deres fra wp_term_taxonomy. Den tredje rydder opp i foreldreløse «term-objekt»-relasjoner fra wp_term_relationships som ble etterlatt uten en overordnet taksonomi. Rekkefølgen er viktig: sletter du taksonomien før termene, vil den tredje spørringen fange opp for mye.
Slette WooCommerce-produkter
Produkter og deres varianter er poster med typen product og product_variation i wp_posts-tabellen. Men det er ikke nok å bare slette rader fra wp_posts: metadata vil bli liggende igjen i wp_postmeta (pris, SKU, fraktinnstillinger) og termerelasjoner vil bli liggende igjen i wp_term_relationships (kategorier, stikkord). Tre spørringer, i kaskade:
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');
Først bryter vi produktets relasjoner med taksonomier, deretter sletter vi metadataene, og først til slutt selve produktposten. Snu rekkefølgen og slett wp_posts først, vil underspørringene SELECT ID FROM wp_posts i andre og tredje trinn returnere et tomt sett, og metadataene og relasjonene blir liggende igjen som dødvekt i databasen.
Rydde opp i foreldreløs postmeta
Etter enhver sletteoperasjon via SQL er det verdt å sjekke om wp_postmeta inneholder rader som refererer til ikke-eksisterende poster. Dette skjer ved avbrutte transaksjoner, ødelagte importer, eller når poster ble slettet uten kaskade:
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;
Spørringen finner alle wp_postmeta-rader som ikke har noen overordnet post i wp_posts og sletter dem. Den er trygg: den rører ikke levende data, kun søppel.
Metode 2: WP-CLI, raskt og uten phpMyAdmin
Har du SSH-tilgang til serveren, håndterer WP-CLI massesletting mer elegant enn noen SQL-spørringer. Én kommando, og WooCommerce går gjennom de relaterte tabellene på egen hånd, uten å etterlate foreldreløse data:
1 wp wc product delete $(wp wc product list --field=ID --per_page=-1) --force
Flagget --per_page=-1 eksporterer ID-ene til alle produkter uten paginering. --force hopper over papirkurven og sletter permanent. Har du mer enn 10 000 produkter, er det bedre å dele opp i batcher på 500 for å unngå å treffe minnegrenser:
1 wp wc product list --field=ID --per_page=500 --page=1 | xargs wp wc product delete --force
For å slette attributter via WP-CLI, bruk:
1 wp wc product_attribute list --field=id --per_page=-1 | xargs -I{} wp wc product_attribute delete {} --force
Hovedfordelen med WP-CLI fremfor rå SQL er at den utløser WooCommerces interne hooks, before_delete_post og after_delete_post. Dette gir hurtigbuffer- og søkeplugins (Elasticsearch, Redis, Relevanssi) en sjanse til å rydde opp i indeksene sine. SQL-spørringer gjør ikke dette; etter dem kan søk fortsette å returnere allerede slettede produkter en stund.
Metode 3: plugins, når du ikke vil røre databasen
For dem som synes kommandolinjen og phpMyAdmin er for risikabelt, tilbyr markedet spesialiserte plugins. De jobber oppå de samme SQL-spørringene, men skjuler dem bak en knapp.
Delete All Products for WooCommerce er en gratis plugin fra det offisielle WordPress.org-arkivet. Den legger til en enkelt knapp i administrasjonspanelet. Klikk → velg «flytt til papirkurv» eller «permanent» → bekreft. Minimale steg, null risiko for en SQL-skrivefeil. Ulempen: den fungerer bare med produkter, den rører ikke attributter.
WooCommerce Store Toolkit (også kjent som Store Toolkit for WooCommerce) er et mer seriøst alternativ. Den rydder ikke bare produkter og attributter, men også ordrer, kuponger, økter og transienter, med filtre etter dato og status. Egnet for en fullstendig dypvask av butikken før en relansering.
Uansett hvilken plugin du velger, gjelder sikkerhetskopiregelen fortsatt. En plugin kjører de samme DELETE-spørringene; du ser dem bare ikke.
Sammenligning av metoder: hva du bør velge og når
Metode | Hastighet | Sikkerhet | Fleksibilitet | Beregnet for |
|---|---|---|---|---|
SQL i phpMyAdmin | Øyeblikkelig | Lav, ingen beskyttelse mot feil | Full kontroll over tabeller | Utviklere, serveradministratorer |
WP-CLI | Rask, sekunder | Høy, hooks og kaskadering | Praktiske flagg og paginering | Utviklere, DevOps |
Plugins | Treg, hundrevis per minutt | Maksimal, UI-basert | Begrenset til pluginens funksjonalitet | Butikkeiere |
Har du ett produkt eller et dusin, vil WooCommerce-grensesnittet «Produkter → velg → Slett» gjøre jobben. Hundrevis eller tusenvis krever SQL eller WP-CLI. En levende produksjonsbutikk der det ikke er rom for feil, krever en plugin eller WP-CLI.
Viktige begrensninger: hva som ikke slettes
Massesletting av produkter og attributter via SQL rører ikke mediefiler. Produktbilder lastet opp til WordPress-mediebiblioteket (poster med post_type = 'attachment') forblir på plass, både i filsystemet og i databasen. Hvis du bygger opp katalogen fra bunnen av og ønsker å frigjøre plass på din hosting, må mediefiler ryddes separat: via «Media → velg → Slett permanent» eller WP-CLI:
1 wp post delete $(wp post list --post_type=attachment --field=ID --per_page=-1) --force
SQL-kommandoer oppdaterer heller ikke WooCommerce-tellere (produktantall per kategori) som er mellomlagret i wp_termmeta og wp_options som transienter med prefikset _wc_term_counts_. Etter en massesletting kan administrasjonspanelet midlertidig vise feil produktantall per kategori. Dette fikses ved å telle på nytt:
1 wp wc tool run recount_terms
Eller via Recount Terms-utvidelsen fra depotet.
Videoen gir en trinnvis gjennomgang av SQL-kommandoer for å slette WooCommerce-attributter i phpMyAdmin: navigering i tabellene og verifisering av resultater etter hver spørring.
⁉️🤔 Ofte stilte spørsmål
Er det trygt å slette produkter via SQL i en live butikk?
I en produksjonsbutikk er bruk av rå SQL for massesletting en risikabel praksis. En enkelt skrivefeil i et tabellnavn eller en
WHERE-klausul kan påvirke ordrer, brukere eller innstillinger. Hvis butikken er live og genererer inntekter, bruk WP-CLI eller utvidelser som hindrer deg i å skyte deg selv i foten. Spar SQL til utviklingsmiljøer, staging og situasjoner der administrasjonsgrensesnittet allerede ikke lar seg laste.
Hvorfor er produkter fortsatt synlige i søk på nettstedet etter SQL-sletting?
Søkeutvidelser (Relevanssi, Elasticsearch, SearchWP) vedlikeholder sin egen indeks, som ikke oppdateres når
wp_postsmanipuleres direkte utenom WordPress-API-et. Etter opprydding via SQL må du bygge opp søkeindeksen på nytt i utvidelsens innstillinger eller via WP-CLI: for eksempelwp relevanssi index --reindex.
Hvordan sletter jeg produkter kun fra en bestemt kategori, ikke alle?
Legg til et filter på
term_taxonomy_idfor den ønskede kategorien. Fremgangsmåten: hent kategoriensterm_id→ finnterm_taxonomy_idiwp_term_taxonomy→ filtrerobject_idiwp_term_relationshipsfør sletting frawp_posts. I praksis er det enklere å bruke WP-CLI:wp wc product list --category=slug-kategorii --field=ID | xargs wp wc product delete --force.
Kan produkter gjenopprettes etter SQL-sletting?
Kun fra en sikkerhetskopi. I motsetning til sletting via WordPress' papirkurv (Flytt til papirkurv), sletter SQL-kommandoen
DELETErader fysisk og irreversibelt. Dette er nettopp grunnen til at regelen «sikkerhetskopier først» gjentas i hver del av denne artikkelen. To minutter brukt på en dump vil spare timer med gjenoppretting.
Hva er forskjellen på å slette attributter og å slette varianter?
Varianter er en undertype av produkter (
product_variation). De slettes med de samme SQL-kommandoene som enkle produkter: betingelsenpost_type IN ('product','product_variation')i den andre blokken av «Metode 1» inkluderer allerede varianter. Attributter (pa_color,pa_size) er taksonomier; de slettes separat, med den første blokken av SQL-kommandoer. Riktig rekkefølge er: produkter først (inkludert varianter), deretter attributter. Gjøres det i omvendt rekkefølge, vil varianter miste sine attributtkoblinger, men variantpostene selv vil forbli i databasen.
Hva du bør bruke i 2026: konklusjonen
SQL-kommandoer, WP-CLI og utvidelser er tre verktøy med varierende risikonivå for én oppgave. Valget koker ned til en enkel matrise:
- Du har SSH og kommandolinjeerfaring → WP-CLI (
wp wc product delete). Trygt, raskt, med hooks. - Ingen SSH, men du har phpMyAdmin og forstår tabellskjemaet → SQL. Full kontroll, umiddelbare resultater. Men sikkerhetskopier først.
- Du vil ha null risiko → Delete All Products eller Store Toolkit. Tregere, men en knapp i stedet for en SQL-spørring.
Uansett scenario er en databasesikkerhetskopi handling nummer én. Ikke start uten.
🔗 Delete All Products for WooCommerce, gratis på WordPress.org🔗 WooCommerce Store Toolkit, avansert butikkopprydding



