勾选仅看有货后列表里仍有 17 个缺货商品,点进去详情页写着暂时缺货,库存数量是 0。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
wp wc update_product_lookup_tables --user=admin # 或 wp eval 'wc_update_product_stock($product, 0);'
库存状态存在 wc_product_meta_lookup 表里,批量改库存走的是 postmeta,这张表没更新。筛选查 lookup 表,展示读 postmeta,两边不同步。这一点先确认清楚,后面就不用反复试。
「有货筛选不生效」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
具体做法是,用 wc_update_product_stock 改库存,别直接写 postmeta;跑一次 lookup 表重建,把历史差异补回来;对比筛选条数和 SQL 里 stock_status 为 instock 的数量。
改完照着核一遍,勾选仅看有货后缺货商品为 0 条,列表数量和 SQL 统计一致。
