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

如何让WooCommerce商品始终显示Stock Status

如何让WooCommerce商品始终显示Stock Status

嘿,我懂你遇到的困扰了——默认WooCommerce确实只在库存状态不是“In stock”的时候才显示状态,而你写的代码虽然能强制显示“In Stock”,但会把你设置的自定义库存文本给覆盖掉,这确实头疼。下面给你两个靠谱的解决方案,你可以根据自己的需求选:

方法一:用钩子保留自定义库存文本

你之前的代码问题出在硬编码了“In Stock”文本,不管商品有没有设置自定义库存状态,都会被覆盖。我们可以修改一下钩子函数,让它优先使用你设置的自定义文本:

add_filter( 'woocommerce_get_availability', 'custom_always_show_stock_status', 10, 2 );
function custom_always_show_stock_status( $availability, $_product ) {
    // 先判断商品是否有库存
    if ( $_product->is_in_stock() ) {
        // 获取商品设置的库存状态键(比如自定义的'lowstock'或者默认的'instock')
        $stock_status_key = $_product->get_stock_status();
        // 将状态键转换为对应的显示文本,包括你设置的自定义文本
        $availability['availability'] = wc_get_stock_status_name( $stock_status_key );
    }
    // 非库存状态保持默认逻辑,自定义文本也会正常显示
    return $availability;
}

这个方法的好处是不用动模板,直接通过钩子就能实现,而且完全保留你设置的任何自定义库存状态文本,不会被硬覆盖。如果你的网站还有其他修改库存状态的钩子,可能需要调整这个函数的优先级(比如把10改成20),确保它最后执行。

方法二:修改模板文件(适合需要自定义样式的场景)

如果你还想调整库存状态的显示样式,修改模板文件会更灵活。不过注意不要直接改WooCommerce核心模板,最好用子主题来做:

  1. 找到WooCommerce插件目录里的templates/single-product/stock.php文件
  2. 把这个文件复制到你的子主题目录下,路径要和插件里一致:your-child-theme/woocommerce/single-product/stock.php
  3. 打开复制后的文件,把里面的判断逻辑改掉:

原代码大概是这样的:

<?php if ( ! $product->is_in_stock() ) : ?>
    <p class="stock out-of-stock"><?php echo esc_html( $product->get_stock_status() ); ?></p>
<?php endif; ?>

改成:

<p class="stock <?php echo esc_attr( $product->get_stock_status() ); ?>">
    <?php echo esc_html( wc_get_stock_status_name( $product->get_stock_status() ) ); ?>
</p>

这样不管商品是“In stock”还是其他自定义状态,都会直接显示出来,你还能通过stock类加上对应的CSS样式,让不同状态显示不同颜色。

备注:内容来源于stack exchange,提问作者Illarion Ponomarev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:09:28