如何根据 WooCommerce 中的不同条件更改单个产品页面上的 'stock management' 可用性文本

How to change the 'stock management' availability text on single product page based on different conditions in WooCommerce

我正在尝试根据 WooCommerce 中的不同条件更改单个产品页面上的 stock management 可用性文本。

有5种情况,取决于'Enable stock management at product level'是转on还是off

  1. 已开启,数量:0
  2. 已开启,数量:2
  3. 已开启,数量:3+
  4. 关闭,缺货
  5. 已关闭,有货

我正在使用

add_filter( 'woocommerce_get_availability', 'wcs_custom_get_availability', 1, 2);
function wcs_custom_get_availability( $availability, $_product ) {
   global $product;

    // Case 3
    if ( $_product->is_in_stock() ) {
        $availability['availability'] = __('3. Turned on, Quantity: 3+', 'woocommerce');
    }

    // Case 2
    if ( $_product->is_in_stock() && $product->get_stock_quantity() <= 2 ) {
        $availability['availability'] = sprintf( __('2. Turned on, Quantity: 2', 'woocommerce');
    }

   // Case 5
    if ( $_product->is_in_stock() && $product->get_stock_quantity() <= 0 ) {
        $availability['availability'] = sprintf( __('5. Turned off, In stock', 'woocommerce'));
    }
    
    // Case 4 and 1 - out of stock
    if ( ! $_product->is_in_stock() ) {
        $availability['availability'] = __('4. Turned off, Out of stock / 1. Turned on, Quantity: 0', 'woocommerce');
    }

    return $availability;
}

但是如何让它适用于可变产品?

对于简单产品,它运行完美,但对于可变产品,有 2 种(共 5 种)情况显示错误结果:

  1. 已开启,数量:0 [工作正常]
  2. 已开启,数量:2 [错误 - 显示案例 5]
  3. 已开启,数量:3+ [错误 - 显示案例 5]
  4. 已关闭,缺货 [工作正常]
  5. 已关闭,有货 [工作正常]

if $product->get_stock_quantity() <= 0 than $_product->is_in_stock() 永远是false,因为库存号小于0或等于0,所以你的逻辑有错误。

也没有必要混合使用global $product$_product。因为 $_product 已经包含产品对象。

  • $product->managing_stock() 可能会派上用场

所以你可以改用:

// Change In Stock Text
function filter_woocommerce_get_availability( $availability, $product ) {       
    // Managing stock is activated
    if ( $product->managing_stock() ) {
        // Stock quantity
        $stock_quantity = $product->get_stock_quantity();
        
        // Compare
        if ( $stock_quantity <= 0 ) {
            $availability['availability'] = __('1. Turned on, Quantity: less then or equal to 0', 'woocommerce' );
        } elseif ( $stock_quantity > 0 && $stock_quantity <= 2 ) {
            $availability['availability'] = __('2. Turned on, Quantity: 1 or 2', 'woocommerce' );           
        } elseif ( $stock_quantity > 3 )  {
            $availability['availability'] = __('3. Turned on, Quantity: 3+', 'woocommerce' );
        }
    } else {
        // In stock
        if ( $product->is_in_stock() ) {
            $availability['availability'] = __('4. Turned off, In stock', 'woocommerce' );      
        } else {
            $availability['availability'] = __('5. Turned off, Out of stock', 'woocommerce' );              
        }
    }

    return $availability;
}
add_filter( 'woocommerce_get_availability', 'filter_woocommerce_get_availability', 10, 2 );