/**
* Stores shipping info on the subscription
*
* @param WC_Subscription $subscription instance of a subscriptions object
* @param WC_Cart $cart A cart with recurring items in it
*/
public static function add_shipping($subscription, $cart)
{
// We need to make sure we only get recurring shipping packages
WC_Subscriptions_Cart::set_calculation_type('recurring_total');
foreach ($cart->get_shipping_packages() as $package_index => $base_package) {
$package = WC_Subscriptions_Cart::get_calculated_shipping_for_package($base_package);
$recurring_shipping_package_key = WC_Subscriptions_Cart::get_recurring_shipping_package_key($cart->recurring_cart_key, $package_index);
$shipping_method_id = isset(WC()->checkout()->shipping_methods[$package_index]) ? WC()->checkout()->shipping_methods[$package_index] : '';
if (isset(WC()->checkout()->shipping_methods[$recurring_shipping_package_key])) {
$shipping_method_id = WC()->checkout()->shipping_methods[$recurring_shipping_package_key];
$package_key = $recurring_shipping_package_key;
} else {
$package_key = $package_index;
}
if (isset($package['rates'][$shipping_method_id])) {
$item_id = $subscription->add_shipping($package['rates'][$shipping_method_id]);
if (!$item_id) {
throw new Exception(__('Error: Unable to create subscription. Please try again.', 'woocommerce-subscriptions'));
}
// Allows plugins to add order item meta to shipping
do_action('woocommerce_add_shipping_order_item', $subscription->id, $item_id, $package_key);
do_action('woocommerce_subscriptions_add_recurring_shipping_order_item', $subscription->id, $item_id, $package_key);
}
}
WC_Subscriptions_Cart::set_calculation_type('none');
}