You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WooCommerce:从CSV文件批量删除指定ID的商品及关联内容

批量删除WooCommerce商品及关联内容的可行方案

针对你需要批量删除12000个WooCommerce商品(含所有关联内容)的需求,我整理了几个经过验证的方案,你可以根据自己的技术能力选择:

一、自定义PHP脚本(最安全可控,推荐)

这个方案利用WooCommerce原生函数处理删除逻辑,能自动清理商品的关联元数据、分类关联等内容,还能避免一次性处理过多数据导致超时。

步骤如下:

  1. 准备商品ID列表:把CSV里的商品ID提取出来,转成数组格式(比如$product_ids = [1001,1002,1003,...]),如果ID数量多,也可以在脚本里直接读取CSV文件。
  2. 创建脚本文件:在你的WordPress根目录新建一个bulk-delete-products.php文件,内容如下:
<?php
// 加载WordPress环境
require_once('wp-load.php');

// 提高执行时间和内存限制,避免中途中断
set_time_limit(0);
ini_set('memory_limit', '256M');

// 替换成你的商品ID列表,或者编写CSV读取逻辑
$product_ids = [1001, 1002, 1003]; // 示例ID,替换为实际ID
$batch_size = 100; // 每批处理的商品数量,可根据服务器性能调整

// 分批处理商品删除
for ($i = 0; $i < count($product_ids); $i += $batch_size) {
    $batch = array_slice($product_ids, $i, $batch_size);
    foreach ($batch as $product_id) {
        // 先校验商品是否存在
        $product = wc_get_product($product_id);
        if ($product) {
            // 用WooCommerce原生函数删除,自动清理关联的元数据、分类等
            wc_delete_product($product_id);
            echo "已删除商品ID: {$product_id}<br>";
        } else {
            echo "商品ID: {$product_id} 不存在,跳过<br>";
        }
    }
    // 每批处理后休眠2秒,减轻服务器压力
    sleep(2);
}

echo "批量删除任务完成!";
?>
  1. 执行脚本:通过浏览器访问你的域名/bulk-delete-products.php,等待执行完成。
  2. 清理脚本:执行完毕后务必删除这个脚本文件,避免安全风险。

注意:如果你的商品包含变种(product_variation类型),需要把变种ID也加入到ID列表中,或者在脚本里添加逻辑,先查询父商品的所有变种ID再批量删除。

二、SQL查询(适合有数据库操作经验的用户)

直接操作数据库效率最高,但风险也大,务必先完整备份数据库,并且先用少量ID测试验证逻辑。

假设你的WordPress数据库前缀是wp_,按顺序执行以下SQL语句:

  1. 删除商品关联的元数据:
DELETE FROM wp_postmeta WHERE post_id IN (你的商品ID列表,用逗号分隔);
  1. 删除商品的分类/标签关联:
DELETE FROM wp_term_relationships WHERE object_id IN (你的商品ID列表);
  1. 删除WooCommerce商品元数据查找表的记录:
DELETE FROM wp_woocommerce_product_meta_lookup WHERE product_id IN (你的商品ID列表);
  1. 最后删除商品本身(同时处理主商品和变种):
DELETE FROM wp_posts WHERE ID IN (你的商品ID列表) AND post_type IN ('product', 'product_variation');

如果需要删除订单中关联的商品项(谨慎操作,订单记录通常建议保留),可以执行:

DELETE oi, oim FROM wp_woocommerce_order_items oi
JOIN wp_woocommerce_order_itemmeta oim ON oi.order_item_id = oim.order_item_id
WHERE oi.order_item_type = 'line_item' AND oim.meta_key = '_product_id' AND oim.meta_value IN (你的商品ID列表);

三、优化现有旧插件

你提到的那款旧插件运行不佳,大概率是因为没有做分批处理,导致超时或内存不足。可以尝试修改插件代码:

  1. 找到插件中处理批量删除的核心函数,添加分批处理逻辑(类似上面脚本的batch_size设置)。
  2. 在函数开头添加执行时间和内存限制:
set_time_limit(0);
ini_set('memory_limit', '256M');
  1. 每次处理一批后添加短暂休眠,减轻服务器压力。

通用注意事项

  • 备份优先:无论用哪个方案,都要先备份网站文件和数据库,避免数据丢失。
  • 先测试:先用少量商品ID测试删除逻辑,确认关联内容都被正确清理后再批量操作。
  • 服务器限制:如果服务器有严格的执行时间限制,分批处理是必须的,避免脚本中途中断。

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

火山引擎 最新活动