Upgrade & Renew to Premium System
Overview
The upgrade system manages two types of premium subscription transitions:
- Upgrading an active standard subscription to premium
- Renewing a standard subscription to premium during the early renewal period
Eligibility
For Upgrades (Active Subscriptions)
A subscriber is eligible to upgrade when:
- The subscription is active
- The subscription is a standard subscription (not premium)
- The subscription is based on copies (not digital)
For Renew to Premium
A subscriber is eligible to renew to premium when:
- The subscription is in the early renewal period
- Defined by
early_renew_days
option - System checks if next payment date is within this period
- Defined by
- The subscription is either:
- Active
- On hold
- The user is the owner of the subscription (not a recipient)
Upgrade Process
1. Initiation
The upgrade process can be initiated through:
- Subscription Actions
- Automatically appears in subscription view
- Only visible when eligibility criteria are met
- Can include informational modal if configured
- Digital Upgrade Links
- Available for digital subscriptions
- Supports both premium and standard upgrades
- Includes special discount handling
2. Flow Types
The system supports multiple flow types:
- Standard Upgrade Flow
- Adds supplemental product to cart
- Includes subscription ID and upgrade type
- Redirects to checkout
- Renew to Premium Flow
- Adds premium subscription to cart
- Includes subscription ID and renewal type
- Can include variation ID for term selection
- Redirects to checkout
- Digital Upgrade Flow
- Special handling for digital subscriptions
- Applies specific discounts
- Maintains digital access
3. Cart Processing
When adding to cart:
- For standard upgrades:
journal_upgrade
: ‘upgrade’subscription_id
: Original subscription ID
- For renew to premium:
journal_renew_to_premium
: ‘renew-to-premium’subscription_id
: Original subscription ID- Optional:
variation_id
andterm
for term selection
- For digital upgrades:
digital_upgrade
: truedigital_upgrade_type
: ‘premium’ or ‘standard’subscription_id
: Original subscription IDnonce
: Security token
4. Order Processing
When the order is processed:
- For standard upgrades:
- Updates existing subscription to premium
- Adjusts shipping and product details
- Fires
journal_subscription_upgraded
action
- For renew to premium:
- Creates new premium subscription
- Attempts to merge with old subscription
- Updates statuses and adds notes
- For digital upgrades:
- Creates new digital subscription
- Applies appropriate discounts
- Maintains digital access
Configuration Options
The following options can be configured in the WordPress admin:
early_renew_days
: Days before expiry to show renew to premium optionrenew_to_premium_label
: Text for the renew to premium buttonsupplemental_product_label
: Text for the upgrade buttonpremium_subscription_id
: Product ID for premium subscriptionsupplemental_product_id
: Product ID for upgrade productone_year_variation_id
: Variation ID for one-year termone_year_term_slug
: Term slug for one-year optionupgrade_enable_modal
: Toggle for upgrade information modalrenew_to_premium_enable_modal
: Toggle for renew to premium modalupgrade_modal_content
: Content for upgrade information modalrenew_to_premium_modal_content
: Content for renew to premium modal
Technical Implementation
Key Functions
standard_upgrade_button()
: Handles standard upgrade button logicdigital_upgrade_buttons()
: Handles digital upgrade optionsmaybe_renew_to_premium_payment()
: Processes renew to premium paymentmaybe_upgrade_payment()
: Processes standard upgrade paymentmaybe_digital_upgrade_payment()
: Processes digital upgrade payment
Hooks and Filters
wcs_view_subscription_actions
: Adds upgrade buttons to subscription viewjournal_subscription_upgraded
: Fires after successful upgradejournal_subscription_after_upgrade
: Fires after upgrade completionwoocommerce_checkout_get_value
: Pre-fills checkout fields
Error Handling
The system includes error handling for:
- Invalid subscription IDs
- Ineligible subscriptions
- Missing required parameters
- Failed subscription merges
- Invalid user permissions
- Cart processing errors
Testing
To test the upgrade system:
- Test Standard Upgrade:
- Create an active standard subscription
- Attempt upgrade through subscription actions
- Verify cart and checkout process
- Confirm subscription transition
- Test Renew to Premium:
- Create a standard subscription in early renewal period
- Attempt renew to premium
- Verify term selection if applicable
- Confirm subscription transition
- Test Digital Upgrade:
- Create a digital subscription
- Attempt both premium and standard upgrades
- Verify discount application
- Confirm digital access maintenance