function save_addresses() { global $woocommerce; require_once $woocommerce->plugin_path() . '/classes/class-wc-cart.php'; require_once $woocommerce->plugin_path() . '/classes/class-wc-checkout.php'; $cart = new WC_Cart(); $woocommerce->checkout = new WC_Checkout(); $checkout = $woocommerce->checkout; //$fields = apply_filters( 'woocommerce_shipping_fields', array() ); $fields = $woocommerce->countries->get_address_fields($woocommerce->countries->get_base_country(), 'shipping_'); $cart->get_cart_from_session(); $cart_items = $cart->get_cart(); if (isset($_POST['shipping_address_action']) && $_POST['shipping_address_action'] == 'save') { $data = array(); $rel = array(); $address_ids = $_POST['addresses']; foreach ($address_ids as $a_id) { if (!isset($_POST['items_' . $a_id]) || empty($_POST['items_' . $a_id])) { continue; } $i = 1; if (isset($rel[$a_id]) && !empty($rel[$a_id])) { continue; } ///echo '<pre>'. print_r($_POST, true); exit; foreach ($_POST['items_' . $a_id] as $x => $cart_key) { $pid = $cart_items[$cart_key]['product_id']; $rel[$a_id][] = $cart_key; $item_key = $cart_key; $sig = $item_key . '_' . $pid . '_'; while (isset($data['shipping_first_name_' . $sig . $i])) { $i++; } $sig .= $i; //echo '<pre>'. print_r($fields, true); exit; if ($fields) { foreach ($fields as $key => $field) { $data[$key . '_' . $sig] = $_POST[$key . '_' . $a_id]; } } $cart_address_ids_session = wcms_session_get('cart_address_ids'); if (!wcms_session_isset('cart_address_ids') || !in_array($sig, $cart_address_ids_session)) { $cart_address_sigs_session = wcms_session_get('cart_address_sigs'); $cart_address_sigs_session[$sig] = $a_id; wcms_session_set('cart_address_sigs', $cart_address_sigs_session); } } } //echo '<pre>'. print_r($_POST, true) .'</pre>'; //echo '<pre>'. print_r($data, true); exit; wcms_session_set('cart_item_addresses', $data); wcms_session_set('address_relationships', $rel); // redirect to the checkout page $checkout_url = $woocommerce->cart->get_checkout_url(); wp_redirect($checkout_url); exit; } elseif (isset($_POST['shipping_account_address_action']) && $_POST['shipping_account_address_action'] == 'save') { unset($_POST['shipping_account_address_action'], $_POST['set_addresses']); $addresses = array(); foreach ($_POST as $key => $values) { foreach ($values as $idx => $val) { $addresses[$idx][$key] = $val; } } $user = wp_get_current_user(); update_user_meta($user->ID, 'wc_other_addresses', $addresses); $woocommerce->add_message(__('Addresses have been saved', 'wc_shipping_multiple_address')); $page_id = woocommerce_get_page_id('myaccount'); wp_redirect(get_permalink($page_id)); exit; } }