后台批量把 120 个商品价格上调 10%,列表页刷新还是原价,隔了十二小时才变,点进详情页却是新价格。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

foreach ($ids as $id) {
  wc_delete_product_transients($id);
  wp_cache_delete('product_' . $id, 'products');
}

列表读的是商品缓存 transient,批量更新走的是直接 SQL,没有触发清理钩子。缓存键还在,前台就一直拿旧值。这一点先确认清楚,后面就不用反复试。

「批量改价缓存」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

具体做法是,批量脚本末尾调 wc_delete_product_transients,按商品 ID 逐个清;对象缓存里的 product 组也清一遍,Redis 那层不会自动失效;改完拿两个商品对比列表页和详情页的价格。

改完照着核一遍,刷新列表页立刻显示新价,和详情页一致,不用等缓存过期。

作者 9823189