WooCommerce中未显示的产品差异库存数量

时间:2017-12-11 19:55:22

标签: php wordpress woocommerce stock variations

在woocommerce中,我更改了“有库存”文本,以显示不同库存号的不同文本。因此,对于3以上的股票数量,它是“5英寸 股票“(用css染成绿色),对于3号或更低的库存数字,它表示”只剩下2个“(用红色表示css)。就像亚马逊一样。

这可以与简单的产品完美配合,如您所见:https://edelmix.de/superdry-urban-blau-limette-quarzuhr-syg164un/

但是对于可变产品,我的代码没有所需的结果。这当然是显示与上述相同的文本以及变化的适当库存量。

我得到的是一份包含所有变体总数的文字。我开启了后端产品级别的产品数量管理所有变化,并在变化中有不同的库存数量。

现在可以看到变量产品的结果: https://stage.edelmix.de/buddha-to-buddha-blue-lace-agate-ring-603ba/

显示的数量为5(从下拉列表中选择变体后)。这是所有变体的总数量。不同的戒指尺寸的库存数量为1/3/1(从我的测试中可以看出,它与价格旁边的股票变量相呼应),这就是我希望在选择每个变量时显示的内容(带有自定义文本与简单产品一样。)

到目前为止我的代码是:

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;
}

为什么这不起作用?

我在最后几个小时内尝试了所有内容,但不知道为什么这不起作用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

它没有用,因为你没有做任何并发症。在钩子函数中, $product 参数是当前选定的产品变体(在变量产品中),因此您不需要任何foreach循环来获取变量产品的变体。< / p>

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

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文件中,或者放在任何插件文件中。

经过测试和工作