Php 通过ajax更新商业配送方法

Php 通过ajax更新商业配送方法,php,jquery,ajax,wordpress,woocommerce,Php,Jquery,Ajax,Wordpress,Woocommerce,我正在使用Wordpress和Woocommerce建立一个食品订购网站。到目前为止,我一直做得很好,但有一点被卡住了,运输方式应该自动选择 流程是什么样的?用户访问我的网站并输入送货地址的邮政编码,然后我的网站显示以该邮政编码送货的餐厅。一些餐馆用更少的时间和更少的运费交付邮政编码,但一些餐馆需要更多的时间和更多的运费 到目前为止,我所做的是从任何一家餐厅提供给我的数据库中获取配送代码。如果用户的邮政编码在列表中不存在,我们将发出警报,否则我们将继续前进 下一步是在更短的送货时间内取回所有按该

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

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

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

下一步是在更短的送货时间内取回所有按该邮政编码送货的餐厅,然后在更长的送货时间内取回按该邮政编码送货的餐厅。基于更少或更多的交付时间,我分别在A区或B区标记用户

我为A区和B区创建了统一费率的配送方法,可以从购物车/结帐页面的下拉列表中选择。现在问题就在这里

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

这种自动更新不是我能做到的

我试过什么?

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

我找不到正确的方法来调用,这可能会触发ajax调用来更新shipping。任何想法都会有帮助

问候

使用
$(body.trigger('update_checkout')在JS中。这将触发一个请求,请求
WC\u AJAX->update\u order\u review
,然后将在签出区域提取所有表单数据。如果您需要传递任何自定义数据,请向签出添加隐藏输入,它应允许您通过
$\u POST
数据传递值

从这里开始,如果您需要处理可用的方法和会话设置,您可以像我一样,覆盖cart-shipping.php中的
shipping\u 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 ) ) );

  }
}
这是防更新的,它将允许您通过添加过滤器自定义该模板


至于重置会话以符合所选方法,不幸的是,我没有答案,因为我自己仍在努力解决这个问题。

感谢Kirk的格式化!在其他地方搜索我自己的答案时有点匆忙。嘿,Trevor,我要说的是,你是说使用JQuery选择HTML主体元素,然后触发update\u checkout事件吗?