如何解决WooCommerce:计算延期交货产品的运输成本
我需要计算延期交货产品的额外运费。我首先想到了重复每个产品的运输成本,但这并不准确。所以我想我应该用我的函数运行另一个函数(与 woocommerce 使用的一样)来计算购物车中每个和所有缺货产品的运费。
这是我目前所在的位置。
library(maps)
library(qdapDictionaries)
list_of_text <- c('Lorem ipsum 12-01-2021 eat,copenhagen 192.41.196.888','192.41.199.888','Lorem ipsum 12-01-2021,copenhagen www.stackoverflow.com swimming')
#regex needs adjusted. Not extracting the first IP Address
ipRegex <- "(?(?=.*?(\\d+\\.\\d+\\.\\d+\\.\\d+).*?)(\\1|))"
regmatches(x = list_of_text,m = regexpr(ipRegex,list_of_text,perl = TRUE))[
regmatches(x = list_of_text,perl = TRUE)) != '']
verbRegex <- substr(paste0((unlist(action.verbs)),'|',collapse = ""),start = 1,nchar(paste0((unlist(action.verbs)),collapse = ""))-1)
unlist(regmatches(x = list_of_text,m = gregexpr(verbRegex,perl = TRUE)) != ''])
citiesRegex <- substr(paste0((unlist(world.cities[world.cities$pop >1000000,'name'])),nchar(paste0((unlist(world.cities[world.cities$pop >1000000,m = gregexpr(citiesRegex,perl = TRUE)) != ''])
因此,我想计算额外费用,就像 woocommerce 计算运输成本一样,而不是根据当前的运输成本和延期交货产品的数量来计算。我想到的另一件事是,我是否也可以将其应用于 Fedex 实时汇率 API。
解决方法
我建议基于 WooCommerce 运费计算方法的替代解决方案。
// Calculate and sum all backorder product shipping fees
add_filter( 'woocommerce_shipping_packages',function ( $packages ) {
foreach ( $packages as $package_key => &$package ){
$backorders = array();
foreach ( $package['contents'] as $cartkey => $values ){
if ( $values['data']->is_on_backorder() ){
if ( empty($i) ) $i = 1; else $i++;
$backorders[ $i ][ $cartkey ] = $values; // Get backorders
} else {
$backorders[ 0 ][ $cartkey ] = $values; // Get NOT backorders
}
}
if ( count( $backorders ) <= 1 ) continue; // Break if no backorder
$tax_rates = WC_Tax::get_shipping_tax_rates();
$new_packages = array();
foreach ( $backorders as $i => $backorder ){
$new_packages[ $i ] = $package;
$new_packages[ $i ]['contents'] = $backorder;
$new_packages[ $i ]['contents_cost'] = array_sum( wp_list_pluck( $backorder,'line_total' ) ); // calculate products total
$new_packages[ $i ] = WC()->shipping()->calculate_shipping_for_package( $new_packages[ $i ] ); // calculate shipping cost
}
foreach ( $package['rates'] as $ratekey => &$rate ){
$rate->cost = 0;
foreach ( $new_packages as $i => $new_package ){
if ( empty( $new_package['rates'][$ratekey] ) ) continue;
$rate->cost += $new_package['rates'][$ratekey]->cost; // sum shipping costs
}
$rate->taxes = WC_Tax::calc_tax( $rate->cost,$tax_rates,true ); // re-calculate taxes
$rate->label = 'Shipped in order'; // change shipping label if you want
}
}
return $packages;
});
这种方法的优点是它还支持使用 flat_rate 和 table_rate 等运输类计算运费。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。