如何修改WooCommerce可变产品无变体时的缺货提示文本?
解决方案
你遇到的问题是因为无任何变体的可变产品所显示的缺货提示,并不通过woocommerce_get_availability过滤器控制,而是由woocommerce_out_of_stock_message过滤器单独处理。你可以通过以下方式实现需求:
1. 添加单独代码修改目标提示
在主题的functions.php文件中插入以下代码:
add_filter( 'woocommerce_out_of_stock_message', 'wcs_custom_no_variations_out_of_stock_message', 10, 2 ); function wcs_custom_no_variations_out_of_stock_message( $message, $product ) { // 仅对无可用变体的可变产品生效 if ( $product->is_type('variable') && empty( $product->get_available_variations() ) ) { // 替换为你需要的自定义文本 $message = __('Utsolgt', 'woocommerce'); // 若需要专属提示,可改成: // $message = __('Ingen tilgjengelige varianter', 'woocommerce'); } return $message; }
2. 优化现有代码逻辑(可选)
你现有代码的判断顺序存在小问题:预订状态的产品同时属于「有货」范畴,会导致预订文本被后续的有货判断覆盖。建议调整现有代码的顺序,同时将新代码整合在一起:
// 修改常规库存状态文本(预订、有货、缺货) add_filter( 'woocommerce_get_availability', 'wcs_custom_get_availability', 10, 2); function wcs_custom_get_availability( $availability, $_product ) { // 优先判断预订状态(预订产品属于有货,需提前匹配) if ( $_product->is_on_backorder() ) { $availability['availability'] = __('Bestillingsvare 10-15 dager', 'woocommerce'); } // 判断有货状态 elseif ( $_product->is_in_stock() ) { $availability['availability'] = __('På lager', 'woocommerce'); } // 判断缺货状态 else { $availability['availability'] = __('Utsolgt', 'woocommerce'); } return $availability; } // 修改无变体可变产品的缺货提示 add_filter( 'woocommerce_out_of_stock_message', 'wcs_custom_no_variations_out_of_stock_message', 10, 2 ); function wcs_custom_no_variations_out_of_stock_message( $message, $product ) { if ( $product->is_type('variable') && empty( $product->get_available_variations() ) ) { $message = __('Utsolgt', 'woocommerce'); } return $message; }
补充说明
get_available_variations()会返回产品的所有有效变体(排除缺货、未发布的变体),返回空数组则代表该可变产品无任何可选择的变体。- 使用
__()函数包裹文本,可保证内容的多语言兼容性。
内容的提问来源于stack exchange,提问作者Thomas Gajda Asbjørnhus
相关产品推荐
相关产品推荐

