基于日期过滤Woocommerce中的送货选项

时间:2015-11-24 19:27:38

标签: ajax wordpress session woocommerce shipping

所以,我有一个复杂的运输问题,我需要在woocommerce中解决。

我需要完成的三件事是:

  1. 根据日期选择器过滤运送方式。
  2. 根据上述日期过滤后,使用最低可用送货方式重置WC() - > session->设置(' selected_shipping_methods'),然后将所选方法设置为$ chosen_method
  3. 根据价格过滤送货方式。
  4. 所以,在这三个中,#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 ) ) );
    
       }
    }
    

0 个答案:

没有答案