Skip to main content

Subscription Plugin Overview

Benecaster manages your podcast feed and subscriber authentication. It needs to know who is subscribed, at which tier, and whether they’re still active — and it gets that answer from a bridge.

You have two ways to supply it. Connect an external membership plugin you already run, in which case that plugin owns payments and subscriptions and the bridge simply translates its answers for Benecaster. Or use Built-in Membership, where Benecaster manages Stripe-powered tiers itself and is the system of record for both. Either way the rest of Benecaster works the same, because everything downstream talks to the bridge rather than to a specific plugin.

The sections below describe the external-plugin case, which is the more common setup. Built-in Membership is covered at the end of this page.

Why a Bridge Is Needed

If you already run a membership plugin, there is no reason for Benecaster to duplicate it. Your existing plugin keeps doing what it does well — payments, trials, coupons, renewals, dunning — and Benecaster stays focused on podcast feed delivery. Nothing has to be migrated, and your subscribers never notice a second system.

The bridge is the contract between them. It’s a small, standardized layer that translates between your membership plugin’s data model and Benecaster’s understanding of a subscriber.

What a Bridge Does

When Benecaster needs to know about a subscriber, it asks the bridge. The bridge translates the question into whatever API calls or database queries your membership plugin requires and returns a standardized answer. Benecaster never talks to your membership plugin directly — it only talks to the bridge.

Specifically, the bridge handles:

Tier lookup — Given a WordPress user ID, return what subscription level they currently hold. The bridge translates your membership plugin’s native concept of “levels,” “plans,” or “memberships” into a tier slug Benecaster understands.

Active status check — Return whether the user’s subscription is currently active. A cancelled, expired, or paused subscription means no feed access.

Subscription events — Listen for events from your membership plugin (subscription activated, cancelled, changed, renewed, payment failed) and notify Benecaster so it can generate or revoke tokens in real time.

What Happens on a Subscription Event

When a subscriber signs up through your membership plugin:

  1. The membership plugin fires a “subscription activated” event
  2. The bridge catches that event and tells Benecaster: user ID, tier, show
  3. Benecaster generates a token for that subscriber
  4. The welcome email is sent with their private RSS feed URL

When a subscription is cancelled or expires:

  1. The membership plugin fires a “cancelled” or “expired” event
  2. The bridge notifies Benecaster
  3. Benecaster marks the token as inactive
  4. The subscriber’s feed returns empty on the next podcast app poll

This happens automatically. You don’t need to manually revoke access when a subscriber cancels — the bridge handles it in real time, as long as your membership plugin fires the relevant event promptly.

Included Bridges

Five subscription options are available — four external membership plugins and Benecaster’s own built-in membership system:

Plugin Notes
MemberPress Recommended for new setups using an external membership plugin.
WooCommerce Subscriptions For podcasters already using WooCommerce for other commerce.
Paid Memberships Pro Well-supported open-source option; the free plugin from WordPress.org is enough.
Restrict Content Pro Lightweight option; now part of the Sandhills Development suite.
Built-in Membership Stripe-powered tiers managed directly in Benecaster — no external membership plugin required. See Built-in Membership.

See Subscription Plugin Compatibility for a detailed comparison, including which features work with each bridge and recommendations for new setups.

One Bridge Per Show

Each show connects to one subscription plugin. If you have multiple supported plugins installed, Benecaster shows a picker during setup — choose the one that manages that show’s podcast subscribers.

If you use different membership plugins for different purposes (for example, WooCommerce for physical products and MemberPress for podcast subscriptions), select the plugin that handles the podcast subscriptions. Benecaster ignores the other one.

One Level on Several Shows

On a site with more than one show, the same membership level can be mapped onto a tier on each show, and not necessarily the same tier: Gold onto Supporter on one show and onto Patron on another, say. Its members get a private feed on every show the level is mapped on, and joining, renewing, a failed payment and cancelling reach all of those shows. Whether the level is free or paying is decided per show, by that show’s mapping.

Members already on the level when you map it on another show don’t get a feed link for that show straight away. With Paid Memberships Pro or Restrict Content Pro, run Sync existing members on that show (see below). With MemberPress or WooCommerce Subscriptions, a member gets the link the next time a membership of theirs starts; a renewal doesn’t create one.

Connecting Your Bridge

The Setup Wizard walks you through connecting a bridge during initial configuration. You can also change the active bridge at any time in Benecaster → Shows → [your show] → Settings → Subscription.

The Bridge Picker

The Subscription tab always lists Built-in Membership first, then any membership plugin that is currently installed and active on your site — not the full list of supported plugins. If you have MemberPress and WooCommerce Subscriptions both installed, you’ll see both alongside Built-in Membership. If no plugin is installed, the tab says so and lists the supported plugins with installation guidance beneath Built-in Membership.

A plugin older than Benecaster supports is listed greyed out, with the reason: “Requires Restrict Content Pro 3.4 or later (you have 3.2)”. Update it to connect it. The minimum versions are MemberPress 1.12.0, WooCommerce Subscriptions 5.6.0, Paid Memberships Pro 3.0 and Restrict Content Pro 3.4 (see Subscription Plugin Compatibility). A plugin that is installed but deactivated can’t be connected either. Connecting one is refused with “… is not active on this site. Activate it under Plugins first.”

Selecting a bridge saves immediately — there’s no separate Save button for the bridge picker. Once you click a plugin name in the list, the bridge is connected and Benecaster begins listening for subscription events from that plugin.

To disconnect the active bridge, use the Clear bridge selection link below the picker. This removes the bridge connection for the current show. Existing tokens are not revoked — subscribers continue to have feed access — but Benecaster stops receiving new subscription events from the disconnected plugin until a new bridge is selected.

When No Supported Plugin Is Active

If none of the supported membership plugins are installed and active, the Subscription tab still offers Built-in Membership, and below it lists the supported plugins with a brief description of each, linking to the relevant setup guide. Install and activate whichever plugin fits your setup, then return to this tab — it appears in the picker automatically once detected.

If you set up Benecaster first and plan to add a membership plugin later, you don’t need to reinstall or re-run the wizard. Install the plugin at any time, then open Benecaster → Shows → [your show] → Settings → Subscription — it appears in the picker automatically.

After connecting, configure your tier mapping — the step that tells Benecaster which of your membership plugin’s levels corresponds to which episode access tier. See Mapping Your Membership Tiers.

Sync Existing Members

Connecting a membership plugin doesn’t give the members already in it a feed link. Benecaster only hears about a member when the plugin reports their membership starting, and for people who joined before you connected, that already happened. Sync existing members fixes that.

It is a section on Benecaster → Shows → [your show] → Settings → Subscription, between Tier Mapping and Signup pages. It appears for shows connected to Restrict Content Pro or Paid Memberships Pro. It doesn’t appear for MemberPress or WooCommerce Subscriptions yet, or for Built-in Membership, which has no outside members to sync.

  1. Map your levels first. Only members on a mapped level are synced.
  2. Decide on Email each member their feed link, ticked by default. It sends the Welcome email to each member who gets a new link, even if the show’s Welcome email is switched off. Untick it to send nothing and share the links yourself.
  3. Click Sync existing members. It runs in the background and shows Syncing… N members checked so far. You can leave the page.

What it does for each active member on a mapped level:

  • No feed link yet: they get one.
  • A link that was cancelled: they get the same link back.
  • A follower who is also a paying member: they move onto the paid feed, on the link they already have.
  • A working link already: they are left exactly as they are.
  • A link you revoked by hand: they are skipped.

When it finishes, the section reads Last sync finished … N members checked:, followed by one line per outcome. If the sync puts your site over your plan’s paying-subscriber limit, it warns you; the newest go to your public feed at the next license check, as new signups would.

Synced members count as existing members, not new ones. Their history starts from when they really joined in the plugin, so they don’t appear as new this month on the Dashboard, and Member Thanks counts their anniversaries from their real start.

A member the plugin holds no start date for counts from the day of the sync instead: their tenure and Member Thanks anniversaries start then. They are still not counted as new, on the Dashboard’s new-this-period figure or in the per-tier figures.

The button is greyed out, with the reason, when the show has no active Benecaster license, the plugin isn’t active, no level is mapped, or a sync is already running.

Using a Membership Plugin Not on This List

The four above are the ones Benecaster builds and supports itself. They are not the limit of what can be connected. A developer can add a bridge for any other membership plugin, and once it is installed it appears in the bridge picker alongside the built-in four and behaves identically — tier mapping, feed access and everything downstream work the same way.

So if you are told your membership plugin “isn’t supported”, the accurate version is that Benecaster doesn’t ship a bridge for it. One can be written.

This is an advanced option intended for developers. A custom bridge is a PHP class, typically delivered as a small companion plugin alongside your main membership plugin. See Integrate a Custom Membership Plugin in the developer documentation for a complete, working example.

Content Drip and Access Scheduling

Most membership plugins include a feature that releases content gradually over the course of a membership — commonly called content drip, content scheduling, or access rules. A member who joins today gets access to some content immediately, then more after 7 days, more after 30 days, and so on.

This feature operates at the WordPress content layer. It filters which posts and pages a user can see based on how long they’ve been a member. It has no effect on Benecaster’s RSS feed delivery.

Benecaster builds feeds from its own availability system. When an episode should appear in a subscriber’s feed, you control that in Benecaster — not in your membership plugin. If you want to release podcast episodes on a staggered schedule (Premium subscribers hear an episode immediately, Basic subscribers hear it a week later, Free subscribers hear it a month later), use Benecaster’s availability dates. Membership plugin drip rules won’t do this.

The practical rule: Configure episode release timing in Benecaster. You can ignore your membership plugin’s drip or access scheduling feature for podcast content entirely.

Each supported plugin’s drip feature is noted in its setup guide:


Compatibility with Membership Plugin Add-ons

Most add-ons for your membership plugin will not affect Benecaster. The bridge is a read-only consumer — it listens for events and reads membership state, but never writes to your membership plugin’s data. That separation means a new add-on installed on the membership plugin side generally has no impact on feed delivery or subscriber access.

There are two areas where friction can occur:

Add-ons that restructure member relationships. Some membership plugin add-ons — such as group accounts, team plans, or family subscriptions — change how the plugin represents who holds a membership. If a group add-on means the membership is held by a “group owner” user rather than the individual listener, the bridge may not see the individual as an active member. If you install an add-on that changes your membership plugin’s member model, verify that your subscribers still appear with the correct tier in Benecaster → Subscribers before announcing the change.

Overlapping welcome emails. When a subscriber signs up, both Benecaster and your membership plugin may send a welcome email — resulting in two messages in the subscriber’s inbox. Benecaster’s welcome email contains the private RSS feed URL and is the one subscribers need; the membership plugin’s email is typically account-related.

If you’d prefer to send only one email, or to combine the two, you have options:

  • Show Settings → Subscription → Welcome and Feed URL Emails: Each Benecaster email type has its own on/off toggle, per show. Turn off the Welcome email for the show where your membership plugin is already handling onboarding. No add-on required, and it actually stops the email now.
  • Disable in your membership plugin: Most membership plugins let you turn off their own welcome email from their settings. This is the simpler option if you want Benecaster’s RSS delivery email to be the only one.
  • Email Editor add-on: Email Editor is a template-customization tool — it does not replace or duplicate the on/off toggles above, which stay in Benecaster itself (with or without Email Editor installed). Install it if you also want full control over the emails’ content and design, not to switch one off.

Note: The Welcome email is the primary way subscribers receive their private RSS feed URL — if you turn it off, your membership plugin’s own onboarding must deliver it instead. Followers are the one exception: they always get Benecaster’s welcome email regardless of this switch, since it’s their only route to a feed URL at all.


For Developers

The benecaster_bridge_connected action fires each time a bridge is saved — whether from the setup wizard or from Settings → Subscription. It does not fire when a bridge is cleared. Args: (string $bridge_slug, int $show_id).

Use this hook to react to bridge connection events from an add-on — for example, to configure a default integration or pre-populate data from the newly connected plugin. See the benecaster_bridge_connected action reference in the developer documentation.

For building a fully custom bridge (integrating a membership plugin not in the built-in set), see Integrate a Custom Membership Plugin.

Levels Your Plugin No Longer Sells

A level that still has members but takes no new signups should still be returned by your bridge’s get_all_tiers(), marked 'accepts_signups' => false. Benecaster then lists it on Tier Mapping with a Signups closed label, counts and prices its members like any other level, and leaves it off [benecaster_pricing_table] and [benecaster_subscribe]. Leaving it out instead would hide its members’ tier from mapping and from the revenue estimate. A bridge that doesn’t set the key is treated as open.

Supporting Sync Existing Members

A custom bridge gets Sync existing members by also implementing the optional Benecaster\Bridge\BridgeMemberListing interface: one paged list of active members per level, and each member’s earliest start date. Restrict Content Pro and Paid Memberships Pro implement it. See Let Sync existing members work with a custom bridge, and for code that reacts to synced members, benecaster_subscription_synced.

Your Source Data Is Keyed by Email; Benecaster Is Keyed by User ID

This is the mismatch every custom bridge hits first. A membership plugin export, a webhook payload or a CSV of members gives you email addresses, and Benecaster’s lookup functions take a WordPress user ID. Two functions bridge the gap:

  • benecaster_get_user_id_by_subscriber_email() — the cheap resolve, one address to one user ID. This is the one to call inside a loop over an import.
  • benecaster_get_subscriber_data() — the whole record for one subscriber on one show, keyed by email: user ID, display names, tier, token status, revocation reason. Reach for this when you want more than the ID, rather than resolving an ID and then making three more calls.

Benecaster subscribers are WordPress users — there is no subscriber record independent of a WP user — so neither function can tell you about an address with no account, and both return an empty result rather than creating one.

See Subscriber Lookup for Developers for the full decision matrix.

Reporting a Lapse, Not Just a Cancellation

The on_subscription_cancelled() callback your bridge invokes takes an optional third argument: $callback( int $user_id, int $show_id, string $reason = 'cancelled' ). Pass 'expired' when your membership plugin can tell that a membership lapsed — a fixed term ran out, or renewals were attempted and gave up — rather than being deliberately cancelled by the subscriber. Two arguments still means 'cancelled', so existing bridges keep working unchanged.

Report the lapse at all, even if you can’t distinguish the reason. A bridge that never calls on_subscription_cancelled() for an expiry leaves that member’s token active indefinitely — still counted as a paying subscriber, and never sent the cancellation email.

Reporting 'expired' triggers benecaster_subscription_expired in addition to the standard cancellation handling, so an add-on can send lapse-specific win-back messaging instead of a “sorry to see you go” cancellation message.

Enabling “Add Subscriber Manually” for a Custom Bridge

Bridge add-ons can expose Benecaster’s “Add subscriber manually” admin action for shows that use their bridge. By default the action is only available on shows using the built-in membership bridge. To unlock it for a custom bridge, implement a two-step contract:

1. Implement BridgeInterface::create_manual_membership() directly on the bridge class. Do not use ManualMembershipUnsupportedTrait — that trait provides a throwing stub for bridges that cannot support this feature. Your implementation should: create the member record in the target plugin’s data model, call TokenManager::generate() to mint a Benecaster token, stamp is_manual_grant = 1 (and manual_expiry_at when an expiry was requested) on the resulting token row via TokenRepository::set_manual_grant(), and return { subscription_id: int, token_prefix: string }.

2. Hook benecaster_bridge_supports_manual_membership to return true for your bridge slug:

add_filter( 'benecaster_bridge_supports_manual_membership', function( bool $default, string $bridge_slug ): bool {
    if ( 'acme_membership' === $bridge_slug ) {
        return true;
    }
    return $default;
}, 10, 2 );

Once both are in place, the “Add subscriber manually” button appears automatically on shows bound to your bridge and the POST /shows/{id}/subscribers/manual endpoint routes through your implementation. See the bridge-add-manual-membership recipe for a complete worked example.

To suppress a specific email type programmatically — for example, to suppress the welcome email only when a specific membership plugin add-on is active, or to route it through your own transactional email provider — use the benecaster_email_should_send_welcome filter. The filter fires after the per-show toggle check; if the email type is disabled in settings, the filter is never reached. See the benecaster_email_should_send filter reference.

Built-in Membership

Benecaster’s built-in membership system lets you manage Stripe-powered subscription tiers directly in WordPress — no external membership plugin required. It is always the first option in the bridge picker, ahead of the four external bridges, on every plan.

Choosing It Before Stripe Is Set Up

You can choose Built-in Membership at any time, including in the Setup Wizard on a brand-new site, before Stripe or a tier exist. The choice is saved at once. It starts working by itself once two things are in place:

  1. Stripe keys configured — at least one Stripe key set (test or live) is saved in Settings → Payments.
  2. At least one active tier exists — create a tier in Benecaster → Memberships → Tiers.

The wizard offers both as skippable steps right after you choose it. Until both are done, nobody can subscribe. A Benecaster admin notice, “Built-in membership is selected but not ready”, names what is missing and links to Payments or Memberships. In Settings → Subscription, a line beneath the picker lists the same missing pieces with Add your Stripe keys and Create a membership tier links. Once both exist, the notice clears and Benecaster begins managing subscriptions directly. Built-in Membership doesn’t use tier mapping, so the “Map at least one subscription tier” notice doesn’t appear for it.

Choosing Between Built-in and an External Bridge

Both approaches are fully supported and neither is going away. The right choice depends on your setup:

Use Built-in Membership if:

  • You’re starting fresh and don’t already have a membership plugin installed.
  • You want a simple setup — just Benecaster and Stripe, no additional plugin to configure.
  • Your subscription needs are straightforward (per-tier pricing, annual and monthly billing, token-based feed access).

Use an external membership plugin if:

  • You already have MemberPress, WooCommerce Subscriptions, or another supported plugin managing your subscribers — migration to built-in is unnecessary disruption.
  • You need features beyond what built-in membership currently supports: advanced couponing, group accounts, content dripping, complex access rules, or multi-currency pricing.
  • You prefer to separate payment processing from your podcasting plugin.

Switching from Built-in to an External Bridge

If you start with Built-in Membership and later decide you need a dedicated membership plugin, you can promote your subscriber records to that plugin. See the “Moving from Built-in Membership to an External Plugin” section below for details.

Moving from Built-in Membership to an External Plugin

If you start with Benecaster’s built-in membership and later decide you need a feature that a dedicated membership plugin offers — advanced couponing, team accounts, content dripping, or a specific payment flow — you can promote your subscriber records to an external plugin without leaving Benecaster.

The bridge handles the write path: because each bridge already knows how to talk to its plugin, it can also create member records in that plugin on your behalf. Your subscribers keep their existing feed URLs throughout — Benecaster simply switches which plugin it consults for tier information going forward.

What transfers automatically:

  • Subscriber records (email, WordPress user account, current tier)
  • Feed access — existing feed URLs are preserved; no subscriber action required

What cannot transfer — payment details:

Due to payment provider security requirements, active payment relationships cannot be moved from one system to another. This is a constraint of how payment processors work, not a Benecaster limitation. Your subscribers will need to re-enter their payment information in the new membership plugin.

To give subscribers time to do this, Benecaster applies a configurable grace period (default 30 days) after the switch. Feed access continues uninterrupted during the grace period. Before starting the promotion, let your subscribers know they’ll need to re-subscribe through your new membership system — most podcasters send a brief announcement email first.

Which plugins support this:

Not every membership plugin supports programmatic member creation. The promote wizard shows only the plugins that are installed, active, and confirmed to support it. The Subscription Plugin Compatibility page lists which bridges include write support.

How to do it:

The promotion wizard is in Benecaster → Shows → [your show] → Settings → Subscription. It walks through: selecting the target plugin, mapping your tiers, previewing the subscriber count, running the transfer, and switching the bridge. The whole process takes a few minutes; your show stays live throughout.

The run also saves each tier’s chosen level as its mapping for the new plugin (a free tier’s mapping as free), and keeps any mappings the show already had for that plugin on levels the wizard didn’t use. If you map two tiers to one level, the level stays with the tier listed first. See Promote to Bridge.

See Also

Need this built rather than just documented? See our services →