时间:2024-03-29
我是一名才华横溢的网络工程师,擅长于使用WordPress和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,写代码来实现我们想要的功能也不晚。
Copyright © 2019-2024 thinkphp.xyz