微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WooCommerce:如何在结账时复制延期交货产品的运费?

如何解决WooCommerce:如何在结账时复制延期交货产品的运费?

嗨,我需要为缺货的产品添加额外的运费。 IE。如果在结账时用户有 3 件产品 1 有库存,有两个缺货订单,并且所选运输方式的费用为 5 美元,则需支付 10 美元的额外费用(每个缺货订单 5 美元)。

总而言之,我需要:

1 - Get the cart information and identify how many backorders are;
2 - Create an extra cost (shipping cost x backorders number);
3 - Update the extra cost if shipping method is changed;

我不期望代码中的解决方案,但我想知道我可以使用哪些钩子来实现上述目标。

解决方法

代码如下。如何为延期交货的产品添加额外的运费。

// Add a extra shipping fee to each backordered product
add_action('woocommerce_cart_calculate_fees','add_backorder_shipping_fee',20,1);
function add_backorder_shipping_fee($cart)
{
    if (is_admin() && !defined('DOING_AJAX'))
        return;

    $backorderNumber = 0;    
    // Loop through the cart items (added products).
    foreach (WC()->cart->get_cart() as $cart_item) {
        // Product Info
        $product = $cart_item['data'];
        // Quantity of product in cart (being purchased).
        $buyingQuantity = $cart_item['quantity'];
        if (!empty($product)) {
            // Calculate if product quantity in cart is more than stock,returns negative if so.
            $isBuyingMoreThanStock = $product->stock_quantity - $buyingQuantity;
            if ($isBuyingMoreThanStock < 0) {
                // Calculate the number of items are being backordered.
                $backorderNumber = $backorderNumber + ($isBuyingMoreThanStock * -1);   
            }
        }
    }
    // Get the shipping cost.
    $totalShippingCost = WC()->cart->get_shipping_total();
    // Calculate and apply the above shipping cost to each backordered item.
    $extraShippingFee = $backorderNumber * $totalShippingCost;
    // Create the fee.
    $cart->add_fee(__('Backorder Extra Shipping Fee (' . $backorderNumber . ')','woocommerce'),$extraShippingFee);

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。