为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据 Woocommerce 中的付款选项更改送货区域?

如何根据 Woocommerce 中的付款选项更改送货区域?

PHP
小怪兽爱吃肉 2021-06-30 16:57:25
目标:我想根据用户拥有的密码为不同的支付网关添加不同的运费。尝试使用运输区域:我的 woo-commerce 仪表板中添加了 3 个不同的运输区域。所有区域都是使用城市的密码和统一费率创建的。但是,如果 PIN 码存在于多个区域中,那么顶级区域将获得第一优先权,而所有其他区域在结账页面将被忽略。现在我想根据支付网关用户选择更改该区域。例如,用户“A”的密码为“123456”,此密码存在于两个发货区:“SH1”、“SH2”。因此,如果用户选择了“货到付款”选项,那么我想在激活“SH2”的同时为他禁用运输区域“SH1”。这是我尝试过的代码,但不起作用。add_filter( 'woocommerce_available_payment_gateways', 'change_user_zone', 20, 1);function change_user_zone(  $gateways ){    $targeted_zones_names = array('COD FCity'); // Targeted zone names    $current_payment_gateway = WC()->session->get('chosen_payment_method'); // Selected payment gateway    // Current zone name    $chosen_methods    = WC()->session->get( 'chosen_shipping_methods' ); // The chosen shipping mehod    $chosen_method     = explode(':', reset($chosen_methods) );    $shipping_zone     = WC_Shipping_Zones::get_zone_by( 'instance_id', $chosen_method[1] );    $current_zone_name = $shipping_zone->get_zone_name();    if($current_payment_gateway === "cod" && $current_zone_name === "COD FCity"){        $WC_Shipping_Zone = new WC_Shipping_Zone();        $var = $WC_Shipping_Zone->set_zone_locations( "India - Maharashtra - Mumbai" );    }    return $gateways;}请帮忙!注意:我正在寻找编码解决方案。如果您想为此建议任何插件,请使用评论部分。
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

好的,我没有找到更改送货区域的方法。所以我根据支付网关和运输区域在购物车中添加了额外费用。


add_filter( 'woocommerce_before_calculate_totals', 'update_the_cart_with_extra_fee');

function update_the_cart_with_extra_fee(){

    global $woocommerce;  

    $targeted_zones_names = array('SH1'); // Targeted zone names

    $current_payment_gateway = WC()->session->get('chosen_payment_method'); // Selected payment gateway


    // Current zone name

    $chosen_methods    = WC()->session->get( 'chosen_shipping_methods' ); // The chosen shipping mehod

    $chosen_method     = explode(':', reset($chosen_methods) );

    $shipping_zone     = WC_Shipping_Zones::get_zone_by( 'instance_id', $chosen_method[1] );

    $current_zone_name = $shipping_zone->get_zone_name();


    if($current_payment_gateway === "cod" && $current_zone_name === "SH1"){

        $extra_shipping_cost = 0;  

        //Loop through the cart to find out the extra costs  

        foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {  

            //Get the product info  

            $_product = $values['data'];  


            //Get the custom field value - make sure it's i.e. 10 not $10.00  

            $custom_shipping_cost = 60; 



            //Adding together the extra costs 

            $extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;


            $woocommerce->cart->add_fee( __('Cash on Delivery', 'woocommerce'), $extra_shipping_cost ); // Place this outside of foreach loop if you want to add fee for every product in the cart.

        }  

    }


}

我希望这会帮助某人。


查看完整回答
反对 回复 2021-07-09
  • 1 回答
  • 0 关注
  • 247 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信