Discount codes change the price of a membership level at checkout. A code can set custom pricing for each level it applies to, or take a percentage or fixed amount off each level’s regular pricing.

Add or Edit a Discount Code

  1. Navigate to Memberships > Settings > Discount Codes in the WordPress admin.
  2. Click Add New Discount Code (or select “edit” on an existing code).
Screenshot of navigation to Discount Codes in Paid Memberships Pro setting within the WordPress admin
  1. Fill out the following for the “General Discount Code Settings“:
    • ID: Auto-generated, internally tracked ID (not public).
    • Code: The value of the code members can enter at checkout (public). Codes can include letters, numbers, and hyphens.
    • Start Date: The date you want the code to begin working.
    • Expiration Date: The date you want the code to expire / stop working.
    • Limit Total Uses: The maximum number of times the code can be used across all users. Leave blank for unlimited uses.
    • Limit Per User: Check the box to restrict the code to a single use per unique user.
    • Discount Type: How the code changes pricing. Choose Set custom pricing per level, Percentage discount, or Fixed amount discount. See Discount Types below.
    • Discount Amount: Shown for percentage and fixed amount codes. The percentage or amount to subtract from the level’s regular pricing at checkout.
    • Applies To: Shown for percentage and fixed amount codes. Check Initial payment, Recurring payments, or both.
  2. In the “Membership Level Settings” section, select which level(s) the code should apply to. Use Select All or Deselect All to change every level at once. If the code uses custom pricing, each selected level shows its own pricing fields. Jump to “Set Custom Pricing per Level” for those fields.
  3. Click Save Code.
Add New Discount Code screen with Discount Type set to Set custom pricing per level
Adding a discount code. Set custom pricing per level is the default Discount Type.

Discount Types

The Discount Type setting decides what a code can change.

Discount TypeWhat the code changesWhat comes from the level
Set custom pricing per levelEverything about the price for each level you select: initial payment, recurring subscription, billing amount and cycle, billing cycle limit, first recurring payment, custom trial, and membership expiration.Nothing. The code’s settings replace the level’s settings completely.
Percentage discountTakes a percentage (0 to 100) off the initial payment, the recurring billing amount, or both.Billing cycle, billing cycle limit, trial, first recurring payment, and expiration.
Fixed amount discountTakes a fixed amount, in your site’s currency, off the initial payment, the recurring billing amount, or both.Billing cycle, billing cycle limit, trial, first recurring payment, and expiration.
Discount code with Discount Type set to Percentage discount, 20 percent, applied to the initial and recurring payments
A Percentage discount code: 20% off the initial and recurring payments.
Discount code with Discount Type set to Fixed amount discount, 10 dollars off the initial payment
A Fixed amount discount code: $10 off the initial payment only.

A few things to know about percentage and fixed amount codes:

  • The discount is calculated at checkout from the level’s current pricing. If you change a level’s price later, the code follows it. Edit the level to change its regular pricing.
  • Initial payment discounts the level’s Initial Payment. Recurring payments discounts the level’s Billing Amount, and only on levels with a recurring subscription. A trial amount is never discounted.
  • A discounted price never goes below zero. A 100% discount, or a fixed amount larger than the price, makes that payment free.
  • The code uses the level’s billing cycle, billing cycle limit, trial, First Recurring Payment, and expiration settings, including any date pattern. See Date Patterns.
  • When you save a code with one of these types, the per-level pricing fields are ignored. Any custom pricing, First Recurring Payment, or expiration date saved on the code for a level is replaced.

Set Custom Pricing per Level

With Set custom pricing per level, the code’s pricing completely overrides the default pricing for the membership level. Setting it up is very similar to the Membership Level’s pricing setup.

Select which level(s) the discount code should be applied to. Once selected, additional fields will show. When you add a level to a code, its fields start with the level’s current settings, and you can change any of them.

Fields include:

  • Initial Payment: The initial amount collected at registration.
  • Recurring Subscription: Check This level has a recurring subscription payment. to bill the member on a recurring basis.
  • Billing Amount: The amount to be billed one cycle after the initial payment, and how often it is billed.
  • Billing Cycle Limit: The total number of recurring billing cycles for this level, including the trial period (if applicable) but not including the initial payment. (Set to zero if membership is indefinite.)
  • First Recurring Payment: When the first recurring payment happens. Choose Default (one billing cycle after checkout), After a number of days, or On a specific date.
  • Custom Trial: Check Add a custom trial period. and set the Trial Billing Amount and how many subscription payments it covers. This option shows when your payment gateway supports recurring trials.
  • Membership Expiration: Check Set when membership access expires. to choose an Expiration Type: After a set duration (a number of hours, days, weeks, months, or years after checkout) or On a specific date.

First Recurring Payment and a specific expiration date use date patterns. See Date Patterns for the options and examples.

Custom pricing codes don’t fall back to the level. If you leave First Recurring Payment on the default or don’t set a specific expiration date on the code, members who use it get no delay and no set expiration date, even if the level has one.

Discount code Membership Level Settings with custom pricing, First Recurring Payment, and Expiration Type for a level
Custom pricing for a level, including First Recurring Payment and Expiration Type.

Discount Codes Admin Page

Navigate to Memberships > Settings > Discount Codes in the WordPress Admin. This screen shows a list of your existing discount codes. You can click on a table heading to sort data by that column, use the search field to find a specific code, or filter the list.

Here is the default data included in this table:

  • ID: Unique identifier for each discount code.
  • Code: The actual code that customers can use to apply the discount. Percentage and fixed amount codes also show a short description under the code, such as “20% off initial payment, recurring payments”.
  • Starts: The date when the discount code becomes active and can be used.
  • Expires: The date when the discount code becomes invalid and can no longer be used.
  • Uses: Indicates the number of times the discount code has been used, followed by the maximum number of uses allowed. For example, “1/unlimited” means the code has been used once and can be used an unlimited number of times.
  • Levels: Specifies the customer levels or tiers to which the discount code applies. It may include categories like “Bronze,” “Silver,” “Gold,” etc.
Discount Codes list showing each code with a description of its discount
The Discount Codes list.

Additionally, the table row provides some actions that can be performed on each discount code:

  • Edit: Allows editing the details of the discount code.
  • Copy: Creates a copy of the discount code, duplicating its settings.
  • Delete: Removes the discount code from the system.
  • Orders: If the discount code has any associated orders, you will see a link to view that list of orders.
Screenshot showing Discount Code Table Actions

Filter the Discount Codes List

Click Filter Results above the table to open the Filters panel, choose your options, and click Apply Filters. A number on the button shows how many filters are active. Click Clear Filters to reset the list.

  • Status: All Statuses, Current (today is between the code’s start and expiration dates), Upcoming (the start date is in the future), or Expired (the expiration date has passed).
  • Usage: All Usage, Unused (never used), Used (used at least once, including codes that are used up), or Used Up (the code has reached its Limit Total Uses). A code with unlimited uses is never used up.
  • Level: All Levels or a single level. The list shows codes that apply to that level.

Filters combine with each other and with the search field.

Discount Codes list with the Filters panel open showing Status, Usage, and Level filters
The Filters panel on the Discount Codes list.

You can add additional data columns to the Discount Codes List using the method outlined in this article.

Last updated on October 30, 2026


Was this article helpful?
YesNo