function cart_updated()
 {
     global $woocommerce;
     $cart = $woocommerce->cart->get_cart();
     if (empty($cart) || !self::cart_is_eligible_for_multi_shipping()) {
         wcms_session_delete('cart_item_addresses');
         wcms_session_delete('cart_address_sigs');
         wcms_session_delete('address_relationships');
         wcms_session_delete('shipping_methods');
         wcms_session_delete('wcms_original_cart');
     }
 }
コード例 #2
0
 public function checkout_process($order_id)
 {
     global $woocommerce;
     $sess_item_address = wcms_session_get('cart_item_addresses');
     $has_item_address = !wcms_session_isset('cart_item_addresses') || empty($sess_item_address) ? false : true;
     do_action('wc_ms_before_checkout_process', $order_id);
     $packages = $woocommerce->cart->get_shipping_packages();
     $sess_item_address = wcms_session_isset('cart_item_addresses') ? wcms_session_get('cart_item_addresses') : false;
     $sess_packages = wcms_session_isset('wcms_packages') ? wcms_session_get('wcms_packages') : false;
     $sess_methods = wcms_session_isset('shipping_methods') ? wcms_session_get('shipping_methods') : false;
     $sess_rates = wcms_session_isset('wcms_package_rates') ? wcms_session_get('wcms_package_rates') : false;
     // Allow outside code to modify session data one last time
     $sess_item_address = apply_filters('wc_ms_checkout_session_item_address', $sess_item_address);
     $sess_packages = apply_filters('wc_ms_checkout_session_packages', $sess_packages);
     $sess_methods = apply_filters('wc_ms_checkout_session_methods', $sess_methods);
     $sess_rates = apply_filters('wc_ms_checkout_session_rates', $sess_rates);
     if ($has_item_address) {
         update_post_meta($order_id, '_multiple_shipping', 'yes');
     }
     // update the taxes
     $packages = $this->calculate_taxes(null, $packages, true);
     $sess_packages = $this->calculate_taxes(null, $sess_packages, true);
     if ($packages) {
         update_post_meta($order_id, '_shipping_packages', $packages);
     }
     if ($sess_item_address !== false && !empty($sess_item_address)) {
         update_post_meta($order_id, '_shipping_addresses', $sess_item_address);
         wcms_session_delete('cart_item_addresses');
         if ($sess_packages) {
             if ($has_item_address) {
                 // remove the shipping address
                 update_post_meta($order_id, '_shipping_first_name', '');
                 update_post_meta($order_id, '_shipping_last_name', '');
                 update_post_meta($order_id, '_shipping_company', '');
                 update_post_meta($order_id, '_shipping_address_1', '');
                 update_post_meta($order_id, '_shipping_address_2', '');
                 update_post_meta($order_id, '_shipping_city', '');
                 update_post_meta($order_id, '_shipping_postcode', '');
                 update_post_meta($order_id, '_shipping_country', '');
                 update_post_meta($order_id, '_shipping_state', '');
             }
         }
     }
     if ($sess_packages !== false && !empty($sess_packages) && $has_item_address) {
         update_post_meta($order_id, '_wcms_packages', $sess_packages);
     }
     if ($sess_methods !== false && !empty($sess_methods) && $has_item_address) {
         $methods = $sess_methods;
         update_post_meta($order_id, '_shipping_methods', $methods);
     } else {
         $order = WC_MS_Compatibility::wc_get_order($order_id);
         $methods = $order->get_shipping_methods();
         $ms_methods = array();
         if ($sess_packages) {
             foreach ($sess_packages as $pkg_idx => $package) {
                 foreach ($methods as $method) {
                     $ms_methods[$pkg_idx] = array('id' => $method['method_id'], 'label' => $method['name']);
                     continue 2;
                 }
             }
         }
         update_post_meta($order_id, '_shipping_methods', $ms_methods);
     }
     if ($sess_rates !== false) {
         update_post_meta($order_id, '_shipping_rates', $sess_rates);
     }
     do_action('wc_ms_after_checkout_process', $order_id);
 }