Php 商品中未显示产品变化库存数量

Php 商品中未显示产品变化库存数量,php,wordpress,woocommerce,stock,variations,Php,Wordpress,Woocommerce,Stock,Variations,在woocommerce中,我更改了“库存”文本,以针对不同的库存编号显示不同的文本。因此,对于3以上的股票,它说:“5英寸 股票”(用css涂成绿色),对于股票编号3或以下的股票,上面写着“只剩下2个”(用css涂成红色)。就像亚马逊那样 这对于简单的产品非常有效,您可以在这里看到: 但是在可变产品上,我的代码没有达到预期的效果。这当然是为了显示与上述相同的文本,以及适当的库存量的变化 我得到的是一个包含所有变体总量的文本。我在后端为所有变体启用了产品级别的产品数量管理,并且在变体上有不同的库

在woocommerce中,我更改了“库存”文本,以针对不同的库存编号显示不同的文本。因此,对于3以上的股票,它说:“5英寸 股票”(用css涂成绿色),对于股票编号3或以下的股票,上面写着“只剩下2个”(用css涂成红色)。就像亚马逊那样

这对于简单的产品非常有效,您可以在这里看到:

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

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

截至目前,可变产品的结果如下所示:

显示的数量为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;
}
add_filter('woocommerce_get_availability','custom_get_availability',1,2);
功能自定义\u获取\u可用性($availability,$\u产品){
全球$商业$产品;
如果($\产品->是\类型('变量')){
$available_variations=$product->get_available_variations();
foreach($可用的变更作为$变更)
{
$variation_id=$variation['variation_id'];
$variation_obj=新的WC_产品_variation($variation_id);
$stock=$variation_obj->get_stock_quantity();
echo$stock;//获取库存数量();
}
//当数量超过3时,将文本“库存”更改为“Auf Lager”
如果($\u产品->库存中(&&$stock>3)$availability['availability']=$stock.''.'如果('auf Lager','woocommerce');
//将文本更改为左n,其中n是数量

如果($\u product->is_in_stock()&($stock因为您没有造成任何复杂因素,所以它不起作用。在挂钩函数中,
$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;
}
add_filter('woocommerce_get_availability','custom_get_availability',1,2);
功能自定义\u获取\u可用性($availability,$\u产品){
$stock=$\产品->获取\库存\数量();
//当数量超过3时,将文本“库存”更改为“Auf Lager”
如果($\u产品->库存中(&&$stock>3)$availability['availability']=$stock.''.'如果('auf Lager','woocommerce');
//将文本更改为左n,其中n是数量

如果($产品->库存中()&&&$stock好吧,这部分是正确的,但没有回答我的问题。对不起……我已经检查并测试了你的代码。我发现了问题所在…请参见下面的答案。谢谢你,Loic。这部分解决了问题。我的代码与你在开始时给出的代码完全相同。但它不起作用。因此我尝试通过更改代码并使其生效来解决问题you’很复杂。我必须更改您的代码。我使用了$product而不是$product。这给了我想要的结果。我不知道$product和$product之间有什么区别。也许您可以解释一下区别?我已经投了较高的票(但我的票没有显示,因为我是新来的).现在也做了标记。再次感谢您,这是我找到的最好的例子。谢谢@Loic Uppoted