修改WooCommerce预购自定义产品类型的“有货”文本
解决方案
修改思路
替换原代码中手动指定产品ID的判断逻辑,改为自动检测产品是否开启了VillaTheme《Product Pre-Orders for WooCommerce》插件的预购功能。针对可变产品,同步检查变体本身或其父产品的预购设置,确保所有预购商品都能自动匹配自定义提示。
修改后的代码
function wcs_custom_get_availability( $availability, $_product ) { // 判断是否为预购产品(兼容可变产品及其变体) $is_pre_order = false; // 检查当前产品的预购设置 if ( get_post_meta( $_product->get_id(), '_vt_wc_pre_order_enabled', true ) === 'yes' ) { $is_pre_order = true; } // 若为变体产品,检查父产品的预购设置 elseif ( $_product->is_type('variation') ) { $parent_id = $_product->get_parent_id(); if ( get_post_meta( $parent_id, '_vt_wc_pre_order_enabled', true ) === 'yes' ) { $is_pre_order = true; } } // 预购产品且有货时,显示自定义提示 if ( $is_pre_order && $_product->is_in_stock() ) { $availability['availability'] = sprintf( __('Available for Pre-Order', 'woocommerce'), $_product->get_stock_quantity()); } // 缺货时显示统一缺货文本 elseif ( ! $_product->is_in_stock() ) { $availability['availability'] = __('Out of Stock', 'woocommerce'); } return $availability; } add_filter( 'woocommerce_get_availability', 'wcs_custom_get_availability', 10, 2 );
关键说明
- 预购检测逻辑:通过插件默认存储的产品元数据
_vt_wc_pre_order_enabled判断产品是否开启预购,无需手动维护产品ID列表。 - 可变产品兼容:针对变体产品,额外检查其父产品的预购设置,避免变体遗漏匹配规则。
- 逻辑优先级:先判断预购且有货的情况,再处理缺货场景,确保提示信息显示符合预期。
内容的提问来源于stack exchange,提问作者rabiancone
相关产品推荐
相关产品推荐

