通过ajax

时间:2015-07-09 10:55:43

标签: php jquery ajax wordpress woocommerce

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

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

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

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

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

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

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

我尝试了什么?

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

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

此致

Similar Thread on Stackoverflow

1 个答案:

答案 0 :(得分: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 ) ) );

  }
}

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

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