通过SQL批量更新简单/变体产品价格并四舍五入为5的倍数
WooCommerce产品价格批量规整SQL方案
需求说明
- 批量更新站点内所有简单产品(simple product)、*变体产品(variation product)*的
regular_price(常规价格)、sale_price(促销价格)字段 - 价格规整规则:按四舍五入逻辑取最接近的5的整数倍,换算示例如下:
125.35 → 125.00
129.10 → 130.00
128.00 → 130.00
127.00 → 125.00
核心计算逻辑
取5的整数倍的计算规则为ROUND(价格字段 / 5, 0) * 5,完全匹配给出的四舍五入要求:
- 125.35/5=25.07 → 四舍五入为25 → 25*5=125
- 129.10/5=25.82 → 四舍五入为26 → 26*5=130
- 128.00/5=25.6 → 四舍五入为26 → 26*5=130
- 127.00/5=25.4 → 四舍五入为25 → 25*5=125
可执行SQL语句
注意:执行前请务必全量备份数据库,避免数据丢失无法恢复。建议先执行查询语句预览更新结果,确认规则匹配后再执行更新操作。
-- 第一步:预览待更新的价格数据,确认计算结果符合预期 SELECT p.ID, p.post_type, pm_reg.meta_value AS original_regular_price, ROUND(pm_reg.meta_value / 5, 0) * 5 AS new_regular_price, pm_sale.meta_value AS original_sale_price, ROUND(pm_sale.meta_value / 5, 0) * 5 AS new_sale_price FROM wp_posts p LEFT JOIN wp_postmeta pm_reg ON p.ID = pm_reg.post_id AND pm_reg.meta_key = 'regular_price' LEFT JOIN wp_postmeta pm_sale ON p.ID = pm_sale.post_id AND pm_sale.meta_key = 'sale_price' WHERE p.post_type IN ('product', 'product_variation') AND p.post_status = 'publish' AND (pm_reg.meta_value IS NOT NULL OR pm_sale.meta_value IS NOT NULL); -- 第二步:确认预览数据无误后,更新常规价格 UPDATE wp_postmeta pm JOIN wp_posts p ON p.ID = pm.post_id SET pm.meta_value = ROUND(pm.meta_value / 5, 0) * 5 WHERE pm.meta_key = 'regular_price' AND p.post_type IN ('product', 'product_variation') AND p.post_status = 'publish' AND pm.meta_value IS NOT NULL AND pm.meta_value != ''; -- 第三步:更新促销价格 UPDATE wp_postmeta pm JOIN wp_posts p ON p.ID = pm.post_id SET pm.meta_value = ROUND(pm.meta_value / 5, 0) * 5 WHERE pm.meta_key = 'sale_price' AND p.post_type IN ('product', 'product_variation') AND p.post_status = 'publish' AND pm.meta_value IS NOT NULL AND pm.meta_value != '';
补充说明
- 上述SQL默认WordPress数据库表前缀为
wp_,如果站点自定义了表前缀,请将SQL中的wp_posts、wp_postmeta替换为实际表名 - 更新完成后建议在WooCommerce后台工具页执行「重建产品数据缓存」,避免前台展示旧价格缓存
内容的提问来源于stack exchange,提问作者Birleyici
相关产品推荐
相关产品推荐

