首页 文章

通过ajax更新woocommerce送货方式

提问于
浏览
2

我正在使用Wordpress和Woocommerce Build 一个食品订购网站 . 到目前为止,我一直表现不错,但卡在一个应该自动选择Shipping方法的地方 .

What is the flow like? 用户访问我的网站并输入收货地址的邮政编码,然后我的网站显示以该邮政编码提供的餐馆 . 有些餐馆以较短的时间和较少的运费提供邮政编码,但有些餐馆需要更多的时间并且需要支付更多的运费 .

到目前为止我所做的是我从任何一家餐馆提供的数据库中获取运输代码 . 如果列表中不存在用户的邮政编码,我们提醒我们继续前进 .

下一步是在较短的交货时间内获取以该邮政编码递送的所有餐馆,然后以更多的交货时间提供以该邮政编码递送的餐馆 . 基于更少或更多的交付时间,我分别在区域A或区域B中标记用户 .

我为区域A和区域B创建了统一运费方式,可以从购物车/结账页面的下拉菜单中选择 . 现在问题就在于此 .

用户不应选择运费率 . 应根据用户标记的区域自动选择和应用它 .

这种自动更新不是我能够实现的 .

What I have tried?

正确的流程应该是将此区域置于Woocommerce会话中,应该在用户到达购物车或结帐页面时自动选择并应用 .

我无法找到正确的方法来调用哪个可以触发ajax调用以更新运输 . 任何想法都会有所帮助 .

问候

Similar Thread on Stackoverflow

1 回答

  • 3

    在JS中使用 $(body).trigger('update_checkout'); . 这将触发对 WC_AJAX->update_order_review 的请求,然后该请求将获取结帐区域中的所有表单数据 . 如果您需要传递任何自定义数据,请向结帐添加隐藏输入,并允许您通过 $_POST 数据传递值 .

    从那里,如果你需要弄乱可用的方法和会话设置,你可以做我做的并覆盖cart-shipping.php中的 shipping_html 函数,就像这样 .

    function woo_new_cart_shipping_html()
    {
      global $woocommerce;
    
      $data_stream = extract_data_from_str( $_POST['post_data'] );
    
      $packages      = $woocommerce->shipping->get_packages();
      $chosen_method = isset( $woocommerce->session->chosen_shipping_methods[0] ) ? $woocommerce->session->chosen_shipping_methods[0] : '';
    
      foreach ( $packages as $i => $package )
      {
         $methods = apply_filters( 'woo_filter_available_methods_by_date',     $package['rates'], $data_stream );
    
         wc_get_template( 'cart/cart-shipping.php', array('package' => $package,
                                                     'available_methods' =>      apply_filters( 'woo_sort_shipping_methods_by_cost', $methods ),
                                                     'show_package_details' => ( sizeof( $packages ) > 1 ),
                                                     'index' => $i,
                                                     'chosen_method' =>  apply_filters( 'woo_set_lowest_shipping_method', $chosen_method, $methods, $data_stream ) ) );
    
      }
    }
    

    这是更新证明,它允许您通过添加过滤器来自定义该模板 .

    至于重置会话以与所选方法相对应,遗憾的是,我没有给你答案,因为我自己仍在努力解决这个问题 .

相关问题