
🗑 Eliminar produtos e atributos do WooCommerce em massa: SQL, WP-CLI e plugins
Abre o painel de administração do WooCommerce e vê três mil produtos, metade dos quais são duplicados de uma importação mal feita, com atributos como «Color 1», «Color 2», «Size_copy_2023». A interface «Produtos → selecionar todos → Eliminar» bloqueia após as primeiras duas centenas. Parece-lhe familiar? A limpeza de catálogos em massa é uma tarefa que todos enfrentam ao migrar uma loja, ao fundir uma base de dados de testes com a de produção ou ao relançar uma loja após uma mudança de marca.
O problema resume-se à forma como o WooCommerce está estruturado: os produtos estão distribuídos por quatro tabelas (wp_posts, wp_postmeta, wp_term_relationships e wp_term_taxonomy), e os atributos são guardados em mais três. Não pode simplesmente clicar em «Eliminar todos»; o motor irá bloquear antes de chegar ao fim da lista. Precisa de uma ferramenta que ignore a interface e aceda diretamente à base de dados, ou que funcione através da CLI.
Abaixo estão três métodos funcionais, desde SQL radical a plugins seguros. Com uma cópia de segurança, verificação de prefixos e a compreensão do que acontece exatamente em cada tabela.
💡 Resumo rápido:
- Faça um dump completo da base de dados;
DELETEé irreversível, não há reciclagem - Verifique o prefixo da tabela no
wp-config.phpe substitua-o porwp_ - Execute os comandos SQL em ordem sequencial: atributos → produtos → metadados órfãos
- Se tiver SSH, o WP-CLI trata disso num único comando e dispara os hooks necessários
- Para uma loja em produção sem experiência em SQL, os plugins com um botão «Eliminar» são mais seguros
Precauções: cópia de segurança e prefixo
Qualquer comando SQL que modifique o conteúdo das tabelas do WordPress é irreversível. O DELETE não pede confirmação, não envia o registo para a reciclagem; a linha desaparece instantânea e permanentemente. Regra número um: faça uma cópia de segurança completa da base de dados antes de executar qualquer uma das consultas abaixo.
A abordagem mais fiável é exportar um dump via phpMyAdmin: separador «Exportar» → formato SQL → comprimir com gzip. Ou através do painel de alojamento (cPanel → Cópia de Segurança → Base de Dados). Para quem trabalha a partir da linha de comandos:
1 mysqldump -u username -p database_name > backup_$(date +%Y%m%d).sql
Segundo ponto: todas as consultas abaixo usam o prefixo padrão wp_. Se alterou o prefixo durante a instalação do WordPress para wpx_, store_ ou qualquer outro, substitua wp_ em cada comando pelo seu. O prefixo real está no wp-config.php, na linha $table_prefix. Verificou? Agora vamos ao que interessa.
Método 1: Comandos SQL no phpMyAdmin, controlo total
O método mais rápido e radical. Mais adequado para quando precisa de eliminar centenas ou milhares de registos de uma só vez e a interface padrão do WooCommerce bloqueia. Todas as consultas são executadas no phpMyAdmin no separador «SQL», uma de cada vez, por ordem rigorosa.
Eliminar atributos do WooCommerce
Os atributos residem em três tabelas ao mesmo tempo: wp_terms, wp_term_taxonomy e wp_term_relationships. Distinguem-se das categorias e etiquetas normais pelo prefixo pa_ no campo taxonomy, abreviatura de «product attribute». É necessário eliminá-los em cascata, começando pelos termos e terminando nas relações:
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);
A primeira consulta elimina os nomes dos atributos de wp_terms. A segunda remove os seus registos de taxonomia de wp_term_taxonomy. A terceira limpa as relações «termo-objeto» órfãs de wp_term_relationships que ficaram sem uma taxonomia de origem. A ordem é importante: se eliminar a taxonomia antes dos termos, a terceira consulta irá apanhar demasiada informação.
Eliminar produtos do WooCommerce
Os produtos e as suas variações são registos com o tipo product e product_variation na tabela wp_posts. Mas simplesmente apagar as linhas de wp_posts não é suficiente: os metadados permanecerão em wp_postmeta (preço, SKU, configurações de envio) e as relações de termos permanecerão em wp_term_relationships (categorias, etiquetas). Três consultas, em cascata:
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');
Primeiro quebramos as relações do produto com as taxonomias, depois eliminamos os metadados e só depois o registo do produto em si. Se inverter a ordem e eliminar primeiro de wp_posts, as subconsultas SELECT ID FROM wp_posts no segundo e terceiro passos devolverão um conjunto vazio, e os metadados e relações permanecerão como peso morto na base de dados.
Limpar metadados órfãos
Após quaisquer operações de eliminação via SQL, vale a pena verificar se wp_postmeta contém linhas que referenciam publicações inexistentes. Isto acontece com transações interrompidas, importações defeituosas ou quando as publicações foram eliminadas sem cascata:
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;
A consulta encontra todas as linhas de wp_postmeta que não têm um registo de origem em wp_posts e elimina-as. É seguro: não toca em dados ativos, apenas em lixo.
Método 2: WP-CLI, rápido e sem phpMyAdmin
Se tiver acesso SSH ao servidor, o WP-CLI trata da eliminação em massa de forma mais elegante do que qualquer consulta SQL. Um comando, e o WooCommerce percorre as tabelas relacionadas por si próprio, sem deixar dados órfãos para trás:
1 wp wc product delete $(wp wc product list --field=ID --per_page=-1) --force
O parâmetro --per_page=-1 exporta os IDs de todos os produtos sem paginação. --force ignora a reciclagem e elimina permanentemente. Se tiver mais de 10 000 produtos, é melhor dividir em lotes de 500 para evitar atingir os limites de memória:
1 wp wc product list --field=ID --per_page=500 --page=1 | xargs wp wc product delete --force
Para eliminar atributos via WP-CLI, use:
1 wp wc product_attribute list --field=id --per_page=-1 | xargs -I{} wp wc product_attribute delete {} --force
A principal vantagem do WP-CLI em relação ao SQL puro é que ele dispara os hooks internos do WooCommerce, before_delete_post e after_delete_post. Isto dá aos plugins de cache e pesquisa (Elasticsearch, Redis, Relevanssi) a oportunidade de limparem os seus índices. As consultas SQL não fazem isto; depois delas, a pesquisa pode continuar a devolver produtos já eliminados durante algum tempo.
Método 3: plugins, para quando não quer mexer na base de dados
Para quem acha a linha de comandos e o phpMyAdmin demasiado arriscados, o mercado oferece plugins especializados. Eles funcionam sobre as mesmas consultas SQL, mas escondem-nas atrás de um botão.
Delete All Products for WooCommerce é um plugin gratuito do repositório oficial WordPress.org. Adiciona um único botão ao painel de administração. Clique → escolha «mover para o lixo» ou «permanentemente» → confirme. Passos mínimos, risco zero de um erro de digitação no SQL. A desvantagem: só funciona com produtos, não mexe nos atributos.
WooCommerce Store Toolkit (também conhecido como Store Toolkit for WooCommerce) é uma opção mais séria. Limpa não só produtos e atributos, mas também encomendas, cupões, sessões e transientes, com filtros por data e estado. Adequado para uma limpeza profunda completa da loja antes de um relançamento.
Qualquer que seja o plugin que escolher, a regra da cópia de segurança continua a aplicar-se. Um plugin executa as mesmas consultas DELETE; simplesmente não as vê.
Comparação de métodos: o que escolher e quando
Método | Velocidade | Segurança | Flexibilidade | Destinado a |
|---|---|---|---|---|
SQL no phpMyAdmin | Instantâneo | Baixa, sem proteção contra erros | Controlo total sobre as tabelas | Programadores, administradores de servidores |
WP-CLI | Rápido, segundos | Alta, hooks e propagação em cascata | Flags convenientes e paginação | Programadores, DevOps |
Plugins | Lento, centenas por minuto | Máxima, baseada em IU | Limitada à funcionalidade do plugin | Donos de loja |
Se tem um produto ou uma dúzia, a interface do WooCommerce «Produtos → selecionar → Eliminar» resolve o problema. Centenas ou milhares pedem SQL ou WP-CLI. Uma loja de produção ativa onde não há margem para erros pede um plugin ou WP-CLI.
Limitações importantes: o que não é eliminado
A eliminação em massa de produtos e atributos via SQL não afeta os ficheiros multimédia. As imagens de produtos carregadas para a biblioteca multimédia do WordPress (registos com post_type = 'attachment') permanecem no lugar, tanto no sistema de ficheiros como na base de dados. Se estiver a reconstruir o catálogo de raiz e quiser libertar espaço no seu alojamento, os ficheiros multimédia devem ser limpos separadamente: via «Media → selecionar → Eliminar permanentemente» ou WP-CLI:
1 wp post delete $(wp post list --post_type=attachment --field=ID --per_page=-1) --force
Os comandos SQL também não atualizam os contadores do WooCommerce (contagens de produtos por categoria) que estão em cache em wp_termmeta e wp_options como transientes com o prefixo _wc_term_counts_. Após uma eliminação em massa, o painel de administração pode mostrar temporariamente contagens de produtos por categoria incorretas. Isto resolve-se recontando:
1 wp wc tool run recount_terms
Ou através do plugin Recount Terms do repositório.
O vídeo fornece um passo a passo dos comandos SQL para eliminar atributos do WooCommerce no phpMyAdmin: navegar pelas tabelas e verificar os resultados após cada consulta.
⁉️🤔 Perguntas frequentes
É seguro eliminar produtos via SQL numa loja em produção?
Numa loja em produção, usar SQL bruto para eliminação em massa é uma prática arriscada. Um simples erro de digitação num nome de tabela ou cláusula
WHEREpode afetar encomendas, utilizadores ou configurações. Se a loja estiver ativa e a gerar receita, use WP-CLI ou plugins que o impeçam de dar um tiro no pé. Guarde o SQL para ambientes de desenvolvimento, staging e situações em que a interface de administração já nem sequer carrega.
Porque é que os produtos ainda aparecem na pesquisa do site após a eliminação por SQL?
Os plugins de pesquisa (Relevanssi, Elasticsearch, SearchWP) mantêm o seu próprio índice, que não é atualizado quando se manipula diretamente a
wp_posts, contornando a API do WordPress. Após a limpeza via SQL, precisa de reconstruir o índice de pesquisa nas definições do plugin ou via WP-CLI: por exemplo,wp relevanssi index --reindex.
Como elimino produtos apenas de uma categoria específica e não de todas?
Adicione um filtro pelo
term_taxonomy_idda categoria desejada. A abordagem: obtenha oterm_idda categoria → encontre oterm_taxonomy_idemwp_term_taxonomy→ filtreobject_idemwp_term_relationshipsantes de eliminar dewp_posts. Na prática, é mais fácil usar WP-CLI:wp wc product list --category=slug-kategorii --field=ID | xargs wp wc product delete --force.
Os produtos podem ser recuperados após a eliminação por SQL?
Apenas a partir de um backup. Ao contrário da eliminação via lixo do WordPress (Mover para o lixo), o comando SQL
DELETEapaga as linhas de forma física e irreversível. É exatamente por isso que a regra «backup primeiro» é repetida em cada secção deste artigo. Dois minutos gastos num dump poupam horas de recuperação.
Qual é a diferença entre eliminar atributos e eliminar variações?
As variações são um subtipo de produtos (
product_variation). São eliminadas pelos mesmos comandos SQL que os produtos simples: a condiçãopost_type IN ('product','product_variation')no segundo bloco do «Método 1» já inclui as variações. Os atributos (pa_color,pa_size) são taxonomias; são eliminados separadamente, pelo primeiro bloco de comandos SQL. A ordem correta é: primeiro os produtos (incluindo variações), depois os atributos. Se for feito ao contrário, as variações perderão as suas ligações aos atributos, mas os registos das variações em si permanecerão na base de dados.
O que usar em 2026: a conclusão
Comandos SQL, WP-CLI e plugins são três ferramentas com níveis de risco diferentes para uma mesma tarefa. A escolha resume-se a uma matriz simples:
- Tem SSH e experiência em linha de comandos → WP-CLI (
wp wc product delete). Seguro, rápido, com hooks. - Não tem SSH, mas tem phpMyAdmin e compreende o esquema das tabelas → SQL. Controlo total, resultados instantâneos. Mas faça backup primeiro.
- Não quer correr riscos → Delete All Products ou Store Toolkit. Mais lento, mas um botão em vez de uma consulta SQL.
Em qualquer cenário, um backup da base de dados é a ação número um. Não comece sem ele.
🔗 Delete All Products for WooCommerce, gratuito no WordPress.org🔗 WooCommerce Store Toolkit, limpeza avançada de loja



