When a member completes checkout on your membership site, their bank statement shows a short line of text: the statement descriptor. This description helps customers identify where the charge came from.

By default, Stripe uses the descriptor configured at the account level in your Stripe dashboard. That works well for most sites. But if you have connected a single Stripe account to more than one website or business entity, the account-level descriptor may not make sense for every site. A member paying for a specialized membership should not see a generic parent company name on their statement: that kind of mismatch leads to confusion, “I did not recognize this charge” support requests, and disputed payments.

This code recipe shows you how to set a site-specific statement descriptor for Stripe payments in Paid Memberships Pro. A single snippet handles both the onsite payment flow and the Stripe Checkout payment flow.

PMPro Code Recipe: Set a Unique Statement Descriptor for Stripe Payments

Do You Need This Recipe?

This recipe is useful if any of the following apply to your site:

  • Your Stripe account is connected to more than one website or business entity, and you want each site to show a different descriptor on customer statements.
  • Your account-level Stripe descriptor is a parent company name that members of a specific site would not recognize.
  • You are receiving disputed charges or “I did not recognize this charge” support requests and want to make the billing line item more identifiable.

If your Stripe account is used exclusively for one membership site, the simpler approach is to update the descriptor directly in your Stripe dashboard under Settings > Business > Business Details > Public Details.

This recipe is for cases where you need to override that account-level setting per site.

Stripe dashboard showing the Statement Descriptor field under Business Details with PAID MEMBERSHIPS PRO as the current value

About the Code Recipe

Stripe’s statement descriptor is set as a parameter on the payment object, either a Payment Intent (for onsite payments) or a Checkout Session (for Stripe Checkout). Paid Memberships Pro exposes filters for both, and this recipe hooks a single callback to each one:

The callback function receives all three parameters from both filters. When $customer is null, the function is being called for an onsite payment and sets $params['statement_descriptor'] directly.

When $customer is present, the function is being called for a Stripe Checkout session and sets the descriptor inside $params['payment_intent_data'].

Note: Stripe enforces a hard maximum of 22 characters for statement descriptors. If your descriptor exceeds this limit or includes invalid characters (<, >, ", ', or *), checkout will fail. Count carefully, including spaces. See Stripe’s descriptor requirements for the full list of restrictions.

Stripe transaction detail showing SITEWIDE SALES as the custom statement descriptor

The Code Recipe

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.

Update the $statement_descriptor variable on line 23 with your preferred site-specific text, remembering to keep it under 22 characters.

How to Customize This Code Recipe

Set a different descriptor per membership level. The $order object passed to both filters includes the membership level ID as $order->membership_id. Use it to return a level-specific descriptor:

Pull the descriptor from your site title. If you want the descriptor to match your WordPress site name automatically, replace the hardcoded string with substr( get_bloginfo( 'name' ), 0, 22 ). The substr() call trims the result to 22 characters as a safety measure, but review the output manually — truncated names can still look confusing on a statement.

Our support team can help you with the code for either of these ideas, or anything else you need for your unique project.

Free Course: Membership Site Development—The Basics

Develop a deeper understanding of membership site development in this beginner-level course. Learn how to make your site work better, save yourself time and money, and improve your site's performance.

Featured Image for Membership Site Development Course: The Basics


Was this article helpful?
YesNo