【发布时间】:2021-07-16 21:25:51
【问题描述】:
我需要计算延期交货产品的额外运费。我首先想到的是复制每个产品的运费,但这并不准确。所以我想我应该使用我的函数运行另一个函数(与 woocommerce 使用的相同)来计算购物车中每个和所有延期交货产品的运费。
这是我到目前为止的位置。
// 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 && $product->backorders_allowed())) {
// Calculate if product quantity in cart is more than stock, returns negative if so.
$isBuyingMoreThanStock = $product->stock_quantity - $buyingQuantity;
if ($isBuyingMoreThanStock < 0) {
//!ITEMS: Calculate the number of items are being backordered.
// $backorderNumber = $backorderNumber + ($isBuyingMoreThanStock * -1);
//!PRODUCTS: Calculate the number of products are being backordered.
$backorderNumber = $backorderNumber + 1;
}
}
}
// Get the shipping cost.
$totalShippingCost = WC()->cart->get_shipping_total() + WC()->cart->get_shipping_tax();
// Calculate and apply the above shipping cost to each backordered item.
$extraShippingFee = $backorderNumber * $totalShippingCost;
// Create the fee.
if ($backorderNumber > 0 && $totalShippingCost > 0) {
$cart->add_fee(__('Backorder Extra Shipping Fee (' . $backorderNumber . ')', 'woocommerce'), $extraShippingFee);
}
}
因此,我想计算额外费用,就像 woocommerce 计算运费一样,而不是获取当前运费和延期交货产品数量的倍数。想到的另一件事是,如果我也可以将其应用于 Fedex 实时费率 API。
【问题讨论】:
-
我不太明白你所说的准确的意思,WooCommerce 运费计算不准确吗?
-
为什么要在开头检查
is_admin()?这样,您的功能永远不会在购物车页面上运行,因为购物车页面不是管理仪表板页面。也许您应该在向开发人员提问之前重新考虑您的代码。
标签: woocommerce shipping fedex