有时候我们的运费可能并不是根据地区来设置多少运费,可能根据的是产品本身的属性统一进行设置费用,往往某一类产品单独增加费用,只借助地区的话无法达到这样的效果。
所以我就想到根据Tag设置运费,统一将产品归为一个Tag,然后统一添加价格。代码如下:
add_filter('woocommerce_shipping_instance_form_fields_flat_rate', function ($fields)
{
$fields[ 'tag_cost_addon' ] = [
'title' => __('符合条件的产品增加多少运费', '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();
// 获取购物车中的商品列表
$products = $cart->get_cart_contents();
// 遍历商品列表获取每个商品的ID
foreach ($products as $item_key => $item) {
$product_id = $item['product_id'];
// 获取商品对象
$product = wc_get_product($product_id);
// 获取商品的标签ID
$tag_ids = $product->get_tag_ids();
// 某个Tag 的 ID设置加运费
$jia_tag_id = 27;
$quantity = $cart->cart_contents_count;
$basic_cost = $flat_rate_class->get_option('cost');
$addon_cost = $flat_rate_class->get_option('tag_cost_addon');
// var_dump($flat_rate_class->get_rate_id());
if (!empty($addon_cost) and in_array($jia_tag_id,$tag_ids)) {
$addon_rate = [
'id' => $flat_rate_class->get_rate_id(),
'label' => __('符合条件的产品增加运费', '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);
// break;
}
}
}, 10, 2);
上面的代码实现了如果产品包含Tag ID为27的产品,就增加设置好的运输费用。事先要这样设置:
© 版权声明
THE END
暂无评论内容