Give existing members a lower price when they upgrade to a higher membership level, automatically, with no discount code required. This code recipe checks a member’s current level at checkout and adjusts the price for one specific upgrade path, so members who are already paying you feel rewarded for moving up instead of paying the (more...)
Give existing members a lower price when they upgrade to a higher membership level, automatically, with no discount code required. This code recipe checks a member’s current level at checkout and adjusts the price for one specific upgrade path, so members who are already paying you feel rewarded for moving up instead of paying the same price as a brand new signup.

This recipe fits when you want to encourage members on one level to upgrade to a specific higher level, and the discount only needs to apply to people who already hold the starting level. It is a flat, fixed discount tied to one level-to-level path, not a general “give everyone a coupon” tool.
If you want to charge members only the difference between what they already paid and the price of a new level, based on how much time is left in their billing cycle, use PMPro’s Proration Add On instead. That Add On calculates prorated credit for you. This recipe is for a flat discount you set yourself.
Best Practices and ConsiderationsThis code only changes the price a member sees at checkout. It does not change the price shown on your Membership Levels page, and the discount only appears once the member selects the level and reaches the checkout page. Tell members about the discount somewhere before checkout (an email, a note on the levels page) so the price does not seem to change on them unexpectedly.
About the Code RecipeThis recipe uses two PMPro hooks.
The pmpro_checkout_level filter runs on the level object before checkout pricing is calculated. The code checks whether the currently logged-in member already holds a specific level with pmpro_hasMembershipLevel(), and whether they are checking out for a different, specific level. When both are true, it overwrites $level->initial_payment with the discounted amount. If the target level also bills on a recurring basis, you can uncomment a few extra lines to discount the recurring billing_amount, cycle_number, and cycle_period too, not just the first payment.
The pmpro_level_cost_text filter adds a short note to the price text everywhere PMPro displays it (checkout, confirmation, account page). The note only appears when the level was actually adjusted by the filter above, so members checking out at the regular price never see it.
Adding the Recipe to Your WebsiteYou 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.
How to Customize This Code Recipe1 in pmpro_hasMembershipLevel( 1 ) to the ID of the level a member must currently hold to qualify for the discount.2 in (int) $level->id === 2 to the ID of the level this discount applies to.25.00 to the discounted initial payment you want to charge.$level->billing_amount, $level->cycle_number, and $level->cycle_period and set them to the terms you want.pmpro_adjust_price_for_members_upgrading_cost_text(), or remove the function and its add_filter() call entirely if you would rather not display any note about the adjusted price.Author: Kim White
Kim White is a Technical Support Engineer here at PMPro. She has a great intuition for unraveling information and coming up with a solution. She’s been building and maintaining websites since 1998 and enjoys helping people make the most of their WordPress membership sites. Kim also organizes her local WordPress WordCamp and Meetup.
Have a question about how to use this feature? Our Support Page outlines three ways to get support.
Our Max plans include hands-on help customizing your membership site and implementing new features. Upgrade to PMPro Max now »
Was this article helpful?
YesNo
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Give Every Customer Who Uses an Affiliate Link an Automatic Discount | 0 | 8.39 | 10-09-2026 |
| 2 | How to Build a Private Vendor Portal or Gated Catalog with Paid Memberships Pro | 0 | 9.29 | 18-09-2026 |
| 3 | Secure Your Member Map With a Private Geocoding API Key | 0 | 6.33 | 17-09-2026 |
| 4 | Scaling for High Traffic Websites: How to Improve WordPress Site Performance | 0 | 9.22 | 21-09-2026 |
| 5 | Become an annual member to avail 30% off | 0 | 15.76 | 18-09-2026 |
| 6 | Import User Meta Fields Stored as an Array via CSV | 0 | 11.81 | 15-09-2026 |
| 7 | Offer Multiple Payment Methods to Increase Conversions | 0 | 7.9 | 21-09-2026 |
| 8 | 🌸 НАБЕРИ — Скидка 6 000₽ от 10 000₽ | ... | 0 | 20.1 | 29-08-2026 |
| 9 | 🍂 WAVE-EPA — Скидка 7% на одно повторное бронирование. До ... | 0 | 12.28 | 10-09-2026 |
| 10 | 🍂 WAVE-EPA — Скидка 7% на одно повторное бронирование. До ... | 0 | 12.28 | 09-09-2026 |