You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MySQL仅删除WooCommerce中分类XY下的产品?

只删除分类XY下WooCommerce产品的MySQL语句调整方案

首先务必记住:执行删除操作前一定要备份数据库,数据删除后几乎无法恢复,千万要谨慎!

第一步:获取分类XY对应的term_id

WooCommerce的产品分类存储在wp_terms表中,先查询你要删除的分类XY对应的ID:

-- 如果知道分类名称用这个
SELECT term_id FROM wp_terms WHERE name = 'XY';

-- 如果知道分类别名(slug)用这个更准确
SELECT term_id FROM wp_terms WHERE slug = 'xy';

把查询到的term_id(比如假设是123)替换到下面的所有语句中。

第二步:修改删除语句(仅删除分类XY下的产品)

我们需要通过wp_term_taxonomy(关联分类ID和分类类型product_cat)和wp_term_relationships(关联产品和分类)来精准筛选目标产品,而不是删除所有产品:

  1. 删除产品与分类的关联关系:
DELETE tr FROM wp_term_relationships tr
JOIN wp_posts p ON tr.object_id = p.ID
WHERE tr.term_taxonomy_id = (
    SELECT term_taxonomy_id 
    FROM wp_term_taxonomy 
    WHERE term_id = 123 AND taxonomy = 'product_cat'
)
AND p.post_type IN ('product','product_variation');
  1. 删除产品的元数据:
DELETE pm FROM wp_postmeta pm
JOIN wp_posts p ON pm.post_id = p.ID
JOIN wp_term_relationships tr ON p.ID = tr.object_id
WHERE tr.term_taxonomy_id = (
    SELECT term_taxonomy_id 
    FROM wp_term_taxonomy 
    WHERE term_id = 123 AND taxonomy = 'product_cat'
)
AND p.post_type IN ('product','product_variation');
  1. 最后删除产品本身:
DELETE p FROM wp_posts p
JOIN wp_term_relationships tr ON p.ID = tr.object_id
WHERE tr.term_taxonomy_id = (
    SELECT term_taxonomy_id 
    FROM wp_term_taxonomy 
    WHERE term_id = 123 AND taxonomy = 'product_cat'
)
AND p.post_type IN ('product','product_variation');

安全测试建议

在执行删除前,你可以把每个DELETE语句改成SELECT *,先确认要删除的产品是否正确,比如:

SELECT p.ID, p.post_title FROM wp_posts p
JOIN wp_term_relationships tr ON p.ID = tr.object_id
WHERE tr.term_taxonomy_id = (
    SELECT term_taxonomy_id 
    FROM wp_term_taxonomy 
    WHERE term_id = 123 AND taxonomy = 'product_cat'
)
AND p.post_type IN ('product','product_variation');

如果查询结果是你要删除的产品,再执行删除操作就没问题了。

内容的提问来源于stack exchange,提问作者Toni_Nutone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:58:01