【问题标题】:Updating woocommerce Shipping Method via ajax通过 ajax 更新 woocommerce 运输方法
【发布时间】:2015-09-27 16:52:09
【问题描述】:

我正在使用 Wordpress 和 Woocommerce 构建一个食品订购网站。到目前为止,我一直做得很好,但在应该自动选择运输方式的地方卡住了。

流程是什么样的? 用户访问我的网站并输入送货地址的邮政编码,然后我的网站会显示以该邮政编码送货的餐厅。一些餐厅在更短的时间内交付该邮政编码并减少运费,但有些餐厅需要更多时间并收取更多运费。

到目前为止,我所做的是从任何餐厅提供的数据库中获取运输代码。如果列表中不存在用户的邮政编码,我们会发出警告,否则我们会继续前进。

下一步是获取所有在该邮政编码中交货时间较短的餐厅,然后是在该邮政编码中交货时间较长的餐厅。根据交付时间的长短,我将用户分别标记在 A 区或 B 区。

我为 A 区和 B 区创建了统一运费的送货方式,可以从购物车/结帐页面的下拉菜单中选择。现在这就是问题所在。

用户不应选择运费。它应该根据用户被标记到的区域自动选择和应用。

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

我尝试了什么?

正确的过程应该是将此区域放入 Woocommerce 会话中,并且应该在用户到达购物车或结帐页面时自动选择并应用它。

我无法找到正确的调用方法,这可能会触发 ajax 调用以更新运输。任何想法都会有所帮助。

问候

Similar Thread on Stackoverflow

【问题讨论】:

    标签: php jquery ajax wordpress woocommerce


    【解决方案1】:

    在您的 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 ) ) );
    
      }
    }
    

    这是更新证明,它可以让您通过添加过滤器来自定义该模板。

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

    【讨论】:

    • 感谢柯克的格式化!在其他地方寻找我自己的答案时有点仓促。
    • 嘿Trevor,澄清一下,您是说使用JQuery 选择HTML body 元素,然后触发update_checkout 事件?
    猜你喜欢
    • 2015-06-28
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2016-03-18
    • 2018-09-25
    • 2017-01-18
    相关资源
    最近更新 更多