如何让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核心模板,最好用子主题来做:
- 找到WooCommerce插件目录里的
templates/single-product/stock.php文件 - 把这个文件复制到你的子主题目录下,路径要和插件里一致:
your-child-theme/woocommerce/single-product/stock.php - 打开复制后的文件,把里面的判断逻辑改掉:
原代码大概是这样的:
<?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
相关产品推荐
相关产品推荐

