所以,我有一个复杂的运输问题,我需要在woocommerce中解决。
我需要完成的三件事是:
所以,在这三个中,#1和#3很简单。我正在解雇一个$(' body')触发器(' update_checkout');选择日期时,将其发送到WC_AJAX-> update_order_review方法。然后重新计算所有相关数据/方法,并返回片段。
但是,在过滤我的送货方式并尝试将最便宜的设置为第一个后,并更改会话以匹配,我遇到了问题。我似乎无法及早更改会话值,以便在第一次尝试时计算出正确的总数。在第二个ajax请求或页面刷新时,会话被设置为正确的方法。
那么,我需要在多大程度上重置该会话以使其在第一次尝试时听取该新值?我需要能够访问$ _POST数据,当前可用的方法,并且如果可能的话,能够在一个地方重置会话,但如果没有,我可以在两个地方运行相同的代码,希望得到正确的结账总计和方法集。
目前,我一直在使用cart-shipping.php工作,并且我已经覆盖其中一个功能以应用一些自定义过滤,如下所示。 这样就完成了#1和#3,但是这里的会话有问题。如果有人知道如何在这里可靠地重置该会话,那就解决了我所有的问题。
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 ) ) );
}
}