后台首页“本月订单”小工具显示 0,订单列表实际 86 笔,隔一天再看又变成 86,几小时后又回到 0。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,统计数据存在 transient 里,过期后回调查询失败返回 false,被当成 0 又缓存了 12 小时。缓存键还带了用户 ID,不同管理员看到的值并不一样。

碰到「仪表盘小工具无数据」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

delete_transient('book_month_orders_' . get_current_user_id());
$data = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_type='shop_order' AND post_status='wc-completed'");
set_transient('book_month_orders_' . get_current_user_id(), (int) $data, HOUR_IN_SECONDS);

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

具体做法是,先删掉旧的 transient 键;在回调里区分查询失败和结果为空;加一个手动刷新按钮 便于核对。

最后用这个标准收尾,小工具显示 86,两个管理员账号看到同一个数字,手动刷新后仍然一致。

作者 9823189