商品改成私有状态后,前台详情页确实 404 了,可旧分享链接调加购接口仍然返回 200,还带出了 59 元的价格。日志里能对上时间点,这种反而好排。
加购接口只校验了商品 ID 存不存在,没看 post_status 和 purchasable。私有商品对管理员可见,接口跑在管理员上下文里,状态判断被跳过去了。这一点先确认清楚,后面就不用反复试。
$product = wc_get_product($id);
if (!$product || get_post_status($id) !== 'publish' || !$product->is_purchasable()) {
return new WP_Error('invalid_product', '商品不可购买', array('status' => 404));
}
「下架商品仍可购买」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
处理上按这个顺序:接口里补 get_post_status 判断,只放行 publish;拿到商品对象后再看 is_purchasable,两个条件缺一不可;把下架、草稿、私有三种状态各测一次,确认都返回 404。
结果对不对很好判断,下架商品调加购接口返回 404,购物车里原有的那一行也被清掉。
