我正在使用Wordpress和Woocommerce建立一个食品订购网站。到目前为止,我一直表现不错,但卡在一个应该自动选择Shipping方法的地方。
流程是什么样的?用户访问我的网站并输入收货地址的邮政编码,然后我的网站会显示以该邮政编码提供的餐馆。有些餐馆用更短的时间和更少的运费来提供邮政编码,但有些餐馆需要更多的时间并且需要更多的运费。
到目前为止,我所做的是我从任何一家餐馆提供的数据库中获取运输代码。如果列表中不存在用户的邮政编码,我们提醒我们继续前进。
下一步是在较短的交货时间内获取以该邮政编码提供的所有餐馆,然后以更多的交货时间提供以该邮政编码递送的餐馆。根据更少或更多的交货时间,我分别在A区或B区标记用户。
我为区域A和区域B创建了统一运费方式,可以从购物车/结账页面的下拉菜单中选择。现在问题就在这里。
用户不应选择运费率。应根据用户标记的区域自动选择和应用它。
这种自动更新不是我能够实现的。
我尝试了什么?
正确的流程应该是将此区域设置为Woocommerce会话,并且应该在用户到达购物车或结帐页面时自动选择并应用。
我无法找到正确的方法来调用可能会触发ajax调用来更新运费。任何想法都会有所帮助。
此致
答案 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 ) ) );
}
}
这是更新证明,它可以让您通过添加过滤器来自定义该模板。
至于重置会话以与所选方法相对应,遗憾的是,我没有给你答案,因为我自己仍在努力解决这个问题。