Members with fixed-term or one-time memberships can renew their membership. During renewal, they may also choose to switch to a recurring subscription for the same level.
By default, Paid Memberships Pro starts the new subscription immediately after renewal, which can cause the member to lose any remaining time from their current term.
This recipe keeps the member’s existing expiration date by skipping the initial payment and starting the new recurring billing cycle when their current term ends.
Understanding What Happens at Checkout
This recipe uses two filters: pmpro_checkout_level and pmpro_level_cost_text.
The pmpro_checkout_level filter runs during checkout, before a user’s membership level is saved. It lets you modify the level object — for example, adjusting its billing amount or start date. In this case, it’s used to set a future start date for the recurring subscription, based on the member’s current expiration date.
The pmpro_level_cost_text filter updates the level’s cost display text on the checkout page. This helps clarify when the recurring billing will begin so members understand they’re paying $0 today and that the new subscription will start later.
Together, these filters make renewals smoother and prevent early billing for members who still have time left on their active membership.

About the Code Recipe
This code recipe delays the start of a new recurring subscription until the member’s current term expires. It sets the initial payment to $0 and adjusts the checkout text to show when the recurring billing will begin.
Where This Recipe Helps:
- When importing members who already have expiration dates, you want them to check out for recurring billing without losing any of their prepaid time.
- When using the Auto-Renewal Checkbox at Membership Checkout Add On, and a member switches from a one-time membership to recurring billing.
These scenarios are common when transitioning existing members to ongoing billing. They also occur when giving members the option to “renew automatically” after a prepaid term. This recipe prevents overlapping billing and protects the member’s remaining paid time. It creates a smoother experience for both the member and the site owner.

The Code Recipe
This customization works as-is — no code edits are required.
Adding the Recipe to Your Website
You can add this recipe to your site by creating a custom plugin or using the Code Snippets plugin available for free in the WordPress repository. Read this companion article for step-by-step directions on either method.


