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

目标:我想根据用户拥有的密码为不同的支付网关添加不同的运费。


尝试使用运输区域:


我的 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;

}

请帮忙!


注意:我正在寻找编码解决方案。如果您想为此建议任何插件,请使用评论部分。


小怪兽爱吃肉
浏览 248回答 1
1回答

jeck猫

好的,我没有找到更改送货区域的方法。所以我根据支付网关和运输区域在购物车中添加了额外费用。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.        }      }}我希望这会帮助某人。
打开App,查看更多内容
随时随地看视频慕课网APP