WooCommerce 中未显示产品变体库存数量

Product variation stock quantity not showing in WooCommerce

在 woocommerce 中,我更改了 "In Stock" 文本以针对不同的库存编号显示不同的文本。因此,对于 3 以上的库存编号,它表示:“ 5 in 库存”(用 css 显示为绿色),对于 3 号或以下的库存编号,它显示 "only 2 left"(用 css 显示为红色)。就像亚马逊所做的那样。

如您在此处看到的,这非常适用于简单的产品:https://edelmix.de/superdry-urban-blau-limette-quarzuhr-syg164un/

但在可变产品上,我的代码没有预期的结果。这当然是为了显示与上述相同的文本以及适当的变体库存数量。

我得到的是一个包含所有版本总数的文本。我在后端为所有变体打开了产品级别的管理产品数量,并且在变体上有不同的库存数量。

到目前为止,可变产品的结果可以在这里看到: https://stage.edelmix.de/buddha-to-buddha-blue-lace-agate-ring-603ba/

显示的数量是 5(在您 select 下拉列表中的变化之后)。这是所有变体的总数量。不同尺寸的戒指有 1/3/1 的存货数量(正如您从我的测试中看到的,与价格旁边的存货变量相呼应),这就是我希望在每个变体 [=37] 时显示的内容=]ed(与简单产品一样使用自定义文本)。

我目前的代码是:

add_filter( 'woocommerce_get_availability', 'custom_get_availability', 1, 2);

function custom_get_availability( $availability, $_product ) {
    global $woocommerce, $product;
    if ($_product->is_type( 'variable' ))  {
        $available_variations = $product->get_available_variations();
        foreach ($available_variations as $variation) 
            {
                $variation_id = $variation['variation_id'];
                $variation_obj = new WC_Product_Variation($variation_id);
                $stock = $variation_obj->get_stock_quantity();
                echo $stock;  // <-- for testing purpose to see if I do get the individual variation-quantities = works!!
            }
        } else {
            $stock = $product->get_stock_quantity();
        }

    // change text "In Stock' to 'Auf Lager' when quantity more than 3
    if ($_product->is_in_stock() && $stock > 3 ) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce');

    // change text to n Left, where n is the quantity
    if ($_product->is_in_stock() && ($stock <= 3 )) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr( $availability['class'] ) . '">' .  __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>';  

    // change text "Out of Stock' to 'SOLD OUT'
    if (!$_product->is_in_stock()) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce');

    // change text "In Stock' to 'Special Order' for products with unmanaged stock
    if ( !$_product->managing_stock() && $_product->is_in_stock() ) $availability['availability'] = __('Auf Lager', 'woocommerce');

  return $availability;
}

为什么这不起作用?

我在过去的几个小时里尝试了所有方法,但不知道为什么它不能正常工作。

非常感谢任何帮助。

它没有用,因为你白白制造了并发症。在挂钩函数中, $product 参数是当前选择的产品变体(在可变产品中),因此您不需要任何 foreach 循环来从变量中获取变体产品。

所以你的代码现在会更紧凑。试试这个:

add_filter( 'woocommerce_get_availability', 'custom_get_availability', 1, 2);
function custom_get_availability( $availability, $_product ) {
    $stock = $_product->get_stock_quantity();

    // change text "In Stock' to 'Auf Lager' when quantity more than 3
    if ( $_product->is_in_stock() && $stock > 3 ) $availability['availability'] = $stock . ' ' .__('auf Lager', 'woocommerce');

    // change text to n Left, where n is the quantity
    if ( $_product->is_in_stock() && $stock <= 3 ) $availability['availability'] = '<p class="stock ed_low_stock ' . esc_attr( $availability['class'] ) . '">' .  __('Nur noch ' . $stock . ' auf Lager!', 'woocommerce') . '</p>';

    // change text "Out of Stock' to 'SOLD OUT'
    if (! $_product->is_in_stock() ) $availability['availability'] = __('zzt. nicht verfügbar!', 'woocommerce');

    // change text "In Stock' to 'Special Order' for products with unmanaged stock
    if ( ! $_product->managing_stock() && $_product->is_in_stock() ) $availability['availability'] = __('Auf Lager', 'woocommerce');

    return $availability;
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

已测试并正常工作