/** * Get prorated sub price. * * @param double $recurring_price * @param WC_Product $product * @return double */ public function get_prorated_price_for_subscription($recurring_price, $product = false) { if (!$product) { $product = $this->product; } $price = 0; if (WC_Subscriptions_Product::is_subscription($product)) { if (0 == WC_Subscriptions_Product::get_trial_length($product)) { if (WC_Subscriptions_Synchroniser::is_product_prorated($product)) { $next_payment_date = WC_Subscriptions_Synchroniser::calculate_first_payment_date($product, 'timestamp'); if (WC_Subscriptions_Synchroniser::is_today($next_payment_date)) { return $recurring_price; } switch ($product->subscription_period) { case 'week': $days_in_cycle = 7 * $product->subscription_period_interval; break; case 'month': $days_in_cycle = date('t') * $product->subscription_period_interval; break; case 'year': $days_in_cycle = (365 + date('L')) * $product->subscription_period_interval; break; } $days_until_next_payment = ceil(($next_payment_date - gmdate('U')) / (60 * 60 * 24)); $price = $days_until_next_payment * ($recurring_price / $days_in_cycle); } else { $price = $recurring_price; } } } return $price; }