You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce自定义price.php后全部商品显示Sold Out的问题排查

问题:修改WooCommerce价格模板后所有商品显示“Sold Out”的排查与修复

我太懂你这种头疼的情况了——从亚马逊导入的商品里,有些没价格或者已经售罄却没从列表移除,直接把页面布局搞乱了,于是你想通过修改woocommerce/templates/loop/price.php模板来解决,结果改完所有商品都显示“Sold Out”,这肯定不是你想要的效果对吧?

你的代码问题出在哪?

你写的代码里有个致命的小错误:你直接用了$price变量,但这个变量根本没被定义过!

在WooCommerce的模板环境里,不会自动生成$price这个变量,你得通过商品对象的方法去获取价格,比如$product->get_price()。直接调用未定义的$price,它默认是空值,所以所有商品都会触发empty($price)的判断,自然全显示成“Sold Out”了。

修复后的正确代码

我们可以利用WooCommerce内置的商品方法来准确判断库存和价格状态,替换你原来的代码:

<?php 
if ( $price_html = $product->get_price_html() ) :
    // 判断商品是否无库存 或者 价格为空
    if ( !$product->is_in_stock() || empty( $product->get_price() ) ) {
        // 这里可以自定义售罄的显示内容,比如带商品详情页链接的Sold Out
        echo '<a href="' . get_permalink( $product->get_id() ) . '" class="sold-out-link">Sold Out</a>';
    } else {
        echo '<span class="price">' . $price_html . '</span>';
    }
endif;
?>

为什么这样改更靠谱?

  • 用官方方法判断库存:$product->is_in_stock()是WooCommerce提供的标准库存判断方法,比自己猜价格是否为空要准确得多,能覆盖所有售罄场景
  • 正确获取商品价格:用$product->get_price()从商品对象里拿到真实价格,避免了未定义变量的问题
  • 灵活自定义:如果你想把售罄链接指向商品详情页,就用get_permalink( $product->get_id() )生成链接,完全按需调整

额外提醒:模板修改的最佳实践

千万别直接修改WooCommerce的核心模板文件!正确的做法是在你的子主题里创建对应的路径:your-child-theme/woocommerce/loop/price.php,把修改后的代码放到这个文件里。这样WooCommerce更新的时候,你的自定义修改不会被覆盖,这是开发者的基本操作习惯哦~

内容的提问来源于stack exchange,提问作者user7301479

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:42:44