【问题标题】:Set all variations out of stock if one variation is out of stock in WooCommerce如果 WooCommerce 中的一种变体缺货,则将所有变体设置为缺货
【发布时间】:2020-11-30 21:10:14
【问题描述】:

我们使用 WooCommerce 运行自助存储系统,并使用 WooCommerce 订阅插件。我们的存储单元是具有可变订阅的独特产品。每个变体都有不同的计费周期(1 个月、3 个月、6 个月和 12 个月)。如果一个变体缺货,我需要整个父产品或至少所有变体都缺货。

我没有找到任何相关的设置,也没有找到如何实现。

感谢任何帮助。

【问题讨论】:

    标签: php wordpress woocommerce woocommerce-subscriptions variable-product


    【解决方案1】:

    当一种变体缺货时,以下内容将使所有变体都缺货(对于特定的可变产品)(也适用于 WooCommerce 订阅)

    add_filter('woocommerce_available_variation', 'set_all_variations_out_of_stock', 10, 3 );
    function set_all_variations_out_of_stock( $data, $product, $variation ) {
        // Set the Id(s) of the related variable product(s) below in the array
        if( in_array( $product->get_id(), array(738) ) ){
            $out_of_stock = false; // initializing
            
            // Loop through children variations of the parent variable product
            foreach( $product->get_visible_children() as $_variation_id ) {
                if( $_variation_id != $data['variation_id'] ) {
                    $_variation = wc_get_product($_variation_id);
                    
                    
                    if( ! $_variation->is_in_stock() ) {
                        $out_of_stock = true; // Flag as out of stock
                        break;
                    }
                }
            }
            if ( $out_of_stock ) {
                $data['availability_html'] = '<p class="stock out-of-stock">'. __('Out of stock', 'woocommerce') .'</p>';
                $data['is_in_stock'] = false;
            }
        }
        return $data;
    }
    

    代码进入您的活动子主题(活动主题)的 function.php 文件中。经过测试并且可以工作。


    重要提示:

    可以在父变量 product 上管理库存。

    1. 启用可变产品的库存管理(在“库存”选项卡上)并在此处设置库存。
    2. 对此可变产品的每个变体禁用库存管理。

    你已经完成了。库存管理现在在变量上处理 产品。

    【讨论】:

    • 非常感谢,我去测试一下。我现在想到的东西,如果 Variant 成为库存产品,它也会使产品有库存吗?
    • 我投了赞成票。但实际上并没有奏效。我测试了它。请在此处查看我的截图:imgur.com/a/HBuLCxG
    • 好吧,我更改了产品 ID 后代码工作正常。我错过了那个评论。是否可以包括所有产品而不是指定 ID?因为我所有的产品都是并且将是可变订阅。
    • @RJay 要使其适用于所有产品,只需删除 if( in_array( $product-&gt;get_id(), array(738) ) ){return $data; 之前的右括号 }...
    • @RJay 刚刚测试了一些东西,它可以工作... 您不需要任何代码: 首先在可变产品并将库存设置为 1。然后在每个变体上,禁用库存管理......所以现在您不需要任何代码,您可以删除我的答案代码。 这只是关于设置。 现在,当您购买某个变体时,所有变体都会缺货。要重新启用产品,您只需要补充可变产品(而不是变体)。所以这适用于前端和后端。
    猜你喜欢
    • 1970-01-01
    • 2022-12-28
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多