/** * Show a "Subscribe to Cart" section in the cart. * Visible only when all cart items have a common 'cart/order' subscription scheme. * * @return void */ public static function show_subscribe_to_cart_prompt() { // Show cart/order level options only if all cart items share a common cart/order level subscription scheme. if ($subscription_schemes = WCS_ATT_Schemes::get_cart_subscription_schemes()) { ?> <h2><?php _e('Cart Subscription', WCS_ATT::TEXT_DOMAIN); ?> </h2> <p><?php _e('Interested in subscribing to these items?', WCS_ATT::TEXT_DOMAIN); ?> </p> <ul class="wcsatt-convert-cart"><?php $options = array(); $active_subscription_scheme_id = WCS_ATT_Schemes::get_active_cart_subscription_scheme_id(); $options[] = array('id' => '0', 'description' => __('No thanks.', 'cart subscription selection - negative response', WCS_ATT::TEXT_DOMAIN), 'selected' => $active_subscription_scheme_id === '0'); foreach ($subscription_schemes as $subscription_scheme) { $subscription_scheme_id = $subscription_scheme['id']; $dummy_product = new WC_Product('1'); $dummy_product->is_converted_to_sub = 'yes'; $dummy_product->subscription_period = $subscription_scheme['subscription_period']; $dummy_product->subscription_period_interval = $subscription_scheme['subscription_period_interval']; $dummy_product->subscription_length = $subscription_scheme['subscription_length']; $sub_suffix = WC_Subscriptions_Product::get_price_string($dummy_product, array('subscription_price' => false)); $options[] = array('id' => $subscription_scheme['id'], 'description' => sprintf(__('Yes, %s.', 'cart subscription selection - positive response', WCS_ATT::TEXT_DOMAIN), $sub_suffix), 'selected' => $active_subscription_scheme_id === $subscription_scheme_id); } foreach ($options as $option) { ?> <li> <label> <input type="radio" name="convert_to_sub" value="<?php echo $option['id']; ?> " <?php checked($option['selected'], true, true); ?> /> <?php echo $option['description']; ?> </label> </li><?php } ?> </ul> <?php } }
/** * Cart items are converted to subscriptions here, then Subs code does all the magic. * * @param WC_Cart $cart * @return void */ public static function apply_convert_to_sub_session_data($cart) { $cart_level_schemes = WCS_ATT_Schemes::get_cart_subscription_schemes(); foreach (WC()->cart->cart_contents as $cart_item_key => $cart_item) { if (isset($cart_item['wccsub_data'])) { // Initialize subscription scheme data $cart_item['wccsub_data']['active_subscription_scheme_id'] = WCS_ATT_Schemes::set_subscription_scheme_id($cart_item, $cart_level_schemes); // Convert the cart item to a subscription, if needed WC()->cart->cart_contents[$cart_item_key] = self::convert_to_sub($cart_item); } } }