$price = $product->get_price();
if ($price === '') {
  $price = get_post_meta($product->get_id(), 'service_price', true);
}

服务项目列表里每张卡片的价格位置都显示询价,后台明明填了 800 元,点进详情页又能看到正确价格。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,服务类商品用的是自定义字段 service_price,列表模板读的却是 WooCommerce 的 _price,这个字段在服务商品上从来没写入过。空字符串经过 wc_price 之后就被替换成了询价。

围绕「服务项目价格为空」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:列表模板改成先读 _price,为空再读 service_price,两个都空才显示询价;后台保存时把 service_price 同步写进 _price,避免两边各存一份;历史数据用一次批量脚本补齐,新保存的覆盖不到旧记录。

改完只确认一件事:服务目录里 800 元的项目显示 ¥800,只有真没填价格的那一条显示询价。

作者 9823189