WooCommerce优惠券CSV导入后过期日期异常及数据库修改无效问题
WooCommerce批量优惠券导入后过期日期异常(数据库更新后后台显示错误日期)
操作步骤
- 使用WooCommerce批量优惠券生成器创建优惠券
- 设置过期日期为2025年12月31日午夜
- 将优惠券导出为CSV文件修正前缀
- 重新导入修正后的CSV到WooCommerce
问题现象
导入后优惠券过期日期从2025-12-31变为2025-12-30;直接执行MySQL语句更新数据库后,数据库显示值正确,但WooCommerce后台仍显示2025-12-30。
已尝试操作
执行以下SQL语句更新数据库:
-- 更新expiry_date字段 UPDATE wp_posts p INNER JOIN wp_postmeta AS pm ON p.ID = pm.post_id SET pm.meta_value = '2025-12-31' WHERE p.post_type = 'shop_coupon' AND pm.meta_key = 'expiry_date'; -- 更新date_expires字段(时间戳) UPDATE wp_postmeta pm SET pm.meta_value = '1767185999' WHERE pm.meta_key = 'date_expires';
数据库返回更新成功,但后台显示日期未变化。
环境信息
- WooCommerce版本:3.3.6
- WordPress版本:5.6.40
- 数据库:MySQL
解决方案
1. 修正时间戳与站点时区的匹配问题
WooCommerce的date_expires字段存储的是UTC时间戳,后台显示的日期会根据站点时区自动转换。若你的站点时区不是UTC,需要重新计算对应时区下2025-12-31 23:59:59的UTC时间戳:
- 例如站点时区为东八区(UTC+8),本地时间
2025-12-31 23:59:59对应的UTC时间是2025-12-31 15:59:59,对应时间戳为1767153599,而非原语句中的1767185999(该时间戳对应UTC+8时区的2026-01-01 03:59:59)。
2. 同步更新两个关联字段
WooCommerce 3.3.x版本同时依赖expiry_date(日期字符串)和date_expires(时间戳)两个字段,需保证两者对应同一时间,执行以下同步更新的SQL:
-- 同步更新所有优惠券的过期日期字段 UPDATE wp_postmeta pm_expiry JOIN wp_postmeta pm_date ON pm_expiry.post_id = pm_date.post_id SET pm_expiry.meta_value = '2025-12-31', pm_date.meta_value = '1767153599' -- 替换为你站点时区对应的UTC时间戳 WHERE pm_expiry.meta_key = 'expiry_date' AND pm_date.meta_key = 'date_expires' AND EXISTS (SELECT 1 FROM wp_posts p WHERE p.ID = pm_expiry.post_id AND p.post_type = 'shop_coupon');
3. 彻底清除缓存
WordPress和WooCommerce会缓存元数据,需完成以下操作:
- 清除WordPress后台的对象缓存(如使用Redis、Memcached等缓存工具)
- 清除页面缓存(如WP Rocket、服务器自带缓存等)
- 手动删除
wp-content/cache目录下的所有文件(若存在)
4. 验证结果
完成上述操作后,刷新WooCommerce优惠券列表,进入单个优惠券的编辑页面确认过期日期是否显示正确。
内容的提问来源于stack exchange,提问作者Alok
相关产品推荐
相关产品推荐

