WooCommerce根据Tag实现增加运费

有时候我们的运费可能并不是根据地区来设置多少运费,可能根据的是产品本身的属性统一进行设置费用,往往某一类产品单独增加费用,只借助地区的话无法达到这样的效果。

所以我就想到根据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的产品,就增加设置好的运输费用。事先要这样设置:

图片[1]-WooCommerce根据Tag实现增加运费 - KEKC博客-KEKC博客
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称常用语 夸夸
夸夸
还有吗!没看够!
表情代码图片

    暂无评论内容