通过ajax更新woocommerce送货方式

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

流动是什么样的? 用户访问我的网站并输入交付地址的邮政编码,然后我的网站显示以该邮政编码提供的餐馆。 一些餐馆以较短的时间和较少的运费提供邮政编码,但有些餐馆需要更多的时间并且需要更多的运费。

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

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

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

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

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

我试过了什么?

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

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

问候

Stackoverflow上的类似线程

使用$(body).trigger('update_checkout'); 在你的JS中。 这将触发对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 ) ) ); } } 

这是更新certificate,它允许您通过添加filter来自定义该模板。

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