WooCommerce如何通过PHP脚本批量将商品分类cat2替换为cat4
WooCommerce批量替换商品分类PHP脚本实现
你只需要将编写好的start.php文件放到WordPress站点根目录(和wp-config.php同层级),访问https://domain.de/start.php?key=你自定义的访问密钥即可自动执行批量替换操作,脚本不会改动商品原有的cat1、cat3等其他分类关联。
前置准备
- 登录WordPress后台,进入「产品-分类」页面,分别编辑cat2、cat4两个分类,在浏览器地址栏找到
tag_ID=后的数字,就是两个分类对应的实际ID,后续替换到脚本对应位置即可 - 执行操作前必须完整备份数据库,重点备份
wp_term_relationships分类关联表,避免操作失误导致数据错乱
完整start.php代码
<?php // 自定义访问密钥,替换为你自己的随机字符串,防止未授权访问 $access_key = 'YOUR_CUSTOM_SECRET_KEY_2024'; if (!isset($_GET['key']) || $_GET['key'] !== $access_key) { die('访问权限校验失败'); } // 加载WordPress核心运行环境 require_once __DIR__ . '/wp-load.php'; // 替换为你提前查到的cat2、cat4分类ID define('OLD_CAT_ID', 2); // cat2对应的分类ID define('NEW_CAT_ID', 4); // cat4对应的分类ID $processed_count = 0; // 查询所有归属cat2分类的商品 $args = [ 'post_type' => 'product', 'posts_per_page' => -1, 'post_status' => ['publish', 'draft', 'pending'], // 覆盖所有状态的商品 'tax_query' => [ [ 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => OLD_CAT_ID, 'include_children' => false // 不匹配子分类下的商品,需要包含子分类可改为true ] ], 'fields' => 'ids', // 只查询商品ID,降低内存占用 'no_found_rows' => true // 跳过分页统计,提升查询效率 ]; $product_ids = get_posts($args); if (!empty($product_ids)) { foreach ($product_ids as $pid) { // 移除商品和cat2的关联,保留其他原有分类绑定 wp_remove_object_terms($pid, OLD_CAT_ID, 'product_cat'); // 给商品追加cat4分类关联,不会覆盖已有分类 wp_set_object_terms($pid, NEW_CAT_ID, 'product_cat', true); // 清理商品缓存 clean_post_cache($pid); $processed_count++; } } echo "处理完成,共更新 {$processed_count} 个商品的分类关联"; ?>
使用注意事项
- 第一次运行建议先注释掉
wp_remove_object_terms、wp_set_object_terms和clean_post_cache三行代码,先打印$product_ids确认匹配的商品属于目标修改范围,确认无误再放开修改逻辑 - 脚本执行完成后立刻从服务器删除
start.php文件,不要长期留存,避免被恶意调用 - 如果站点商品数量超过1000,建议把
posts_per_page参数值改为100,增加分页循环逻辑,避免PHP内存溢出报错 - 脚本仅移除cat2关联、新增cat4关联,不会修改商品绑定的cat1、cat3等其他分类,也不会改动商品标题、价格、库存等核心数据
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

