Fixing WooCommerce Subscription Renewal Failures Caused by Retired Products

A common issue with WooCommerce sites offering memberships or subscriptions occurs when a product tied to an active subscription is set to “Draft” or unpublished. This can prevent returning subscribers from renewing or paying existing invoices.

In this guide, Freshy’s development team explains how we diagnosed and resolved a case where a retired product was blocking manual subscription renewals — and how to prevent it from happening in the future.

Issue Background

A long-time subscriber attempted to renew their membership through a manual invoice generated by WooCommerce Subscriptions. However, when trying to pay, they encountered the following behavior:

  • After clicking the “Pay Now” link in the invoice email, the system redirected them to an empty cart screen.
  • Attempting to update payment information or retry the checkout looped back to the cart with the message:
    The order has not been added. Your cart is empty.
  • The order remained in Pending status, even though the invoice link was valid.

Upon review, our team identified that the subscription’s parent product had been retired — the WooCommerce product associated with the original subscription was set to Draft.

Diagnosis

When a WooCommerce product is set to Draft, it becomes inaccessible to the checkout process — even if there are active subscriptions tied to it.

Here’s what happens behind the scenes:

  1. When WooCommerce Subscriptions generates a renewal order, it references the original product ID to rebuild the checkout context.
  2. If that product is not “Published,” WooCommerce cannot load its metadata (price, SKU, billing interval, etc.), and the cart validation fails.
  3. As a result, the system displays an empty cart error because there is no valid, purchasable item in the order.

To confirm this, our team reproduced the issue in a staging environment by manually setting a subscription product to Draft, generating a renewal invoice, and attempting payment. The error replicated exactly as reported.

Resolution Steps

Once the root cause was confirmed, our developer followed these steps to resolve the issue quickly and safely:

1. Temporarily Set the Product Back to “Published”

The retired product was changed from Draft to Published in the Products admin screen. This restored WooCommerce’s ability to locate the product metadata and process renewal orders.

2. Verified Renewal Payment Flow

After republishing the product, the customer retried their “Pay Now” link — the checkout page loaded properly, and the payment processed without error. The subscription status updated automatically from Pending to Active, confirming success.

3. Set the Product Back to “Draft”

Once the payment completed, the product was safely reverted to Draft, ensuring it remained hidden from new purchases while still linked to existing subscriptions.

4. Added Internal Note for Future Renewals

A note was added to the client’s workflow documentation: before processing manual renewals for retired products, temporarily republish them to allow successful payment.

Best Practice: Handling Legacy or Retired Subscription Products

To prevent this issue in the future, Freshy recommends the following WooCommerce configuration steps:

  1. Do not delete or unpublish subscription products tied to active users. Instead, mark them as “Hidden” using the Catalog Visibility option.
    Navigate to Products → Edit Product → Publish Box → Catalog visibility → Hidden. This keeps the product live for system processes but invisible to customers browsing the store.
  2. Label retired products clearly — for example, “(Retired – Do Not Use)” — to avoid confusion during manual renewals.
  3. Use a staging environment to test any product status changes affecting subscriptions.
  4. Add conditional logic with a custom snippet to handle checkout attempts for retired items more gracefully:
add_action('woocommerce_before_checkout_form', function() {
    foreach (WC()->cart->get_cart() as $cart_item) {
        if (get_post_status($cart_item['product_id']) !== 'publish') {
            wc_add_notice(__('This product is no longer available for purchase.'), 'error');
            wc_empty_cart();
            break;
        }
    }
});
  1. Monitor renewal failures in WooCommerce → Status → Logs under subscriptions or braintree logs to catch issues early.

Final Outcome

After republishing the retired product temporarily, the client’s subscriber was able to complete their renewal successfully. All subscription data remained intact, and WooCommerce’s payment workflow continued to operate correctly for other users.

This fix demonstrates how simple product visibility settings can impact subscription renewals — and why understanding WooCommerce’s dependency chain is key to managing memberships effectively.

Key Takeaways

  • WooCommerce Subscriptions depend on the original product’s published status to process renewals.
  • Setting a product to Draft will break renewal and manual payment flows for any linked subscriptions.
  • Use Hidden visibility instead of Draft for retired products to maintain backend functionality.
  • Always document renewal workflows for legacy members or products before archiving items.

Freshy’s WooCommerce specialists are experts in diagnosing and fixing subscription and payment flow issues for membership-based sites.

If your site experiences failed renewals, payment errors, or cart validation issues, our team can help ensure seamless billing and retention for your members. Contact Freshy today to optimize your WooCommerce subscription system.