您的当前位置:首页 > 知识博客 > wordpress建站

WooCommerce根据订单数量计算和加收运费

时间:2024-03-29

自我介绍

我是一名才华横溢的网络工程师,擅长于使用WordPress和WooCommerce开发高质量的电子商务网站。

如何自定义WooCommerce运费规则

WooCommerce默认的运费规则比较简单,遇到复杂的运费设置需求可能处理不了,有一些插件可以添加自定义配送方式来实现更灵活的运费设置,比如比较常用的WooCommerceWeightBasedShipping,可以让我们根据订单的重量收取运费。除了插件,我们还可以利用WooCommerce提供的Hook来修改默认的配送方式来满足我们的需要。

比如有这样一个需求:购买5件商品之内时(含5件),运费为12元,超过5件商品时,每增加5件,加收运费4元(超出部分不足5件时按5件计算)。

稍微分析一下,我们就可以得出订单运费的计算方法,设订单中的商品数量为X,最终运费为12+ceil((x–5)/5)*4元。

由于计算公式很简单,我们可以直接改造一下WooCommerce的【统一费率】配送方式,加上我们的这个公式来计算订单运费。

首先,为统一费率配送方式添加附加运费设置

下面的代码可以添加一个附加运费的设置到WooCommerce默认的统一费率配送方式中,用户可以根据实际情况设置增加的金额。

add_filter('woocommerce_shipping_instance_form_fields_flat_rate',function($fields)
{
$fields['cost_addon']=[
'title'=>__('每增加5件商品加收的运费','woocommerce'),
'type'=>'text',
'placeholder'=>'',
'default'=>'',
'desc_tip'=>true,];

return$fields;
});

根据运费规则计算运费

有了上面的设置,我们就可以根据运费公式来获取设置,计算运费了,实例代码如下,需要的朋友可以根据自己的具体业务逻辑进行改造。

add_action('woocommerce_flat_rate_shipping_add_rate',function($flat_rate_class,$rate)
{
global$woocommerce;

$cart=$woocommerce->cart;
$package=$cart->get_shipping_packages();
$quantity=$cart->cart_contents_count;

$basic_cost=$flat_rate_class->get_option('cost');
$addon_cost=$flat_rate_class->get_option('cost_addon');
$addon_qty=$quantity-5;

if($addon_qty>0&&!empty($addon_cost)){
$addon_charge_qty=ceil($addon_qty/5);
$addon_cost=$addon_cost*$addon_charge_qty;

$addon_rate=[
'id'=>$flat_rate_class->get_rate_id(),
'label'=>__('Flatrate','woocommerce'),
'cost'=>$basic_cost+$addon_cost,
'taxes'=>false,
'calc_tax'=>'per_order',
'meta_data'=>[],
'package'=>$package,
'price_decimals'=>wc_get_price_decimals(),
];

$flat_rate_class->add_rate($addon_rate);
}

},10,2);

除了本文中用到的两个Hook,WooCommerce还提供了类似的Hook来帮助我们对其他功能进行修改或增加来实现我们的需求。不过使用插件还是最为方便的方法,当默认功能不能满足我们的需要时,先找一下有没有可以实现的插件,如果没有,再查代码,找Hook,写代码来实现我们想要的功能也不晚。


欢迎咨询/Welcome to inquire
tel/vx:18842938855
qq:1685522781
email:1685522781@qq.com

Copyright © 2019-2024 thinkphp.xyz


Whatsapp