[benecaster_subscribe]
Renders a subscription call-to-action with tier options. Pulls tier names and prices live from the active subscription bridge so they stay in sync automatically. Displays subscribe buttons linked to the bridge’s checkout flow.
“Subscribe” means paying here, not adding the show to a podcast app. Podcasters use the word both ways, and listeners overwhelmingly hear the second one — so a page that says “Subscribe” over this shortcode and nothing else will be read as “follow the show” by some visitors and “start paying” by others. Three different shortcodes cover the three things people mean, and it is worth being deliberate about which one a given button is:
- Paying to access private tiers — this shortcode.
- Adding the show in a podcast app —
benecaster_platform_links or benecaster_rss_link. - Joining a free list without paying —
benecaster_follower_signup.
The clearest labels name the outcome rather than the action: “Get the private feed”, “Listen in your app”, “Join the free list”. Whatever you choose, avoid putting a bare “Subscribe” heading above two of these on the same page.
Tiers are the access levels defined in Benecaster’s tier mapping (Settings → Subscription → Tier Mapping), where each membership plugin level is assigned a slug. Pass those slugs to the tiers attribute to control which tiers appear. Omit the attribute to show all mapped tiers automatically.
On a show using a membership plugin (MemberPress, WooCommerce Subscriptions, Paid Memberships Pro or Restrict Content Pro), each card shows the tier’s name, the price your membership plugin charges for the level mapped to it, in that plugin’s own currency format, and a Subscribe button — Join free on a free tier — that goes to the plugin’s signup page for that level.
- The signup page is suggested from your membership plugin’s settings, and you can
confirm or replace it for each level under Show Settings → Subscription → Signup pages. Only a page on this site is ever linked. A level with no page has no button. - A tier with no membership level mapped to it shows its name only, with no price and no
button — there is nowhere to send anyone. - Two levels mapped to one tier (say, a monthly and an annual) each get their own card,
with the level’s name under the tier’s, because they are two prices and two signup pages. - The price is always the membership plugin’s. It never falls back to a price set under
Memberships → Tiers, and a level the plugin reports no price for shows none. - Tiers mapped to a membership plugin the show no longer uses are not listed.
To add a description to each card, see benecaster_subscribe_tier_content.
Billing cadences (built-in membership). A tier is one Stripe Product with N Prices, so each tier card carries its own cadence selector rather than the page carrying a single global monthly/annual toggle. Tiers on the same page can offer different cadence sets and each card presents only what that tier actually sells.
- Two or more cadences — the card renders a radio group, one option per cadence, with the
tier’s default cadence pre-selected. The button label re-renders as the selection changes. - One cadence — no selector is rendered. The price appears inline and the button goes
straight to checkout. - No cadences — the tier is free. The card shows a Join free button and signing up
needs no payment step. Removing every price from a tier does not take it off sale; it makes the tier free, so Benecaster refuses to remove a paid tier’s last price while anyone is still paying on it. Their tier never turns into Join free here. To stop selling a tier, switch it to inactive under Memberships → Tiers instead: it leaves this page and takes no new sign-ups, while existing subscribers keep their access and keep paying their current rate. See Built-in Membership.
The button label follows the pattern Subscribe {cadence_label} — {amount} (e.g. Subscribe monthly — $8.00), where the cadence half is the label the podcaster typed into the tier’s Prices repeater.
A logged-in viewer who already has a plan sees a short panel instead of, or above, the tier cards. Logged-out visitors see the cards as usual.
- On a paid plan: “You are subscribed to {plan}” and a pointer to their account page,
with no tier cards. They change plans from their account page, not here. A member given access free of charge by the podcaster counts as subscribed. - On a free plan: “You are on the {plan} plan”, then the paid tiers only. This page is
a free member’s route to a paid plan, so it keeps selling to them; free plans aren’t offered again. - Following the show: “You are following this show”, then every tier.
The panel carries benecaster-subscribe__current plus --paid, --free or --follower. It includes no account-page link, because the account page is wherever you placed [benecaster_account]. To add one, or to change or remove the panel, use benecaster_subscribe_current_membership.
Style options:
cards(default) — a grid of cards, one per tier, each showing the tier name, price
pulled from the bridge, and a subscribe button. Best for full-width landing pages and pricing sections.list— a compact single-column list with tier name, price, and button on each row.
Suited for sidebars or narrow contexts where a card grid would be too wide.minimal— tier names and subscribe buttons only, no price or description. Use when
price is already shown elsewhere on the page or when embedding inside a styled wrapper.
All rendered elements carry BEM CSS classes for full visual customization via CSS without modifying plugin files. On each tier card: benecaster-subscribe__tier (with --free or --highlighted), benecaster-subscribe__tier-name, benecaster-subscribe__price, benecaster-subscribe__description and benecaster-subscribe__cta; the cards sit in benecaster-subscribe__tiers, inside benecaster-subscribe.
Logged-out visitors. A visitor who is not logged in is asked for an email address and a password before the subscription is created, on the paid tier as well as the free one. The account is created with the password they chose, so they can log in immediately — no set-password email is sent on this path, and nothing has to arrive in their inbox first. Minimum 12 characters (WordPress’s own suggested figure), counted in characters rather than bytes; length is the only rule.
An email that already has an account stops the signup with a “please log in” message, before the password or the card is read at all. That ordering is what makes it safe for a public form to accept a password: without it, anyone could take over an existing account by typing its owner’s address into the form. See benecaster_subscribe_user_created to react to a new account, and benecaster_subscriber_account_provisioned for the separate case of an account created for somebody.
Marketing consent. The checkout shows an unticked consent checkbox, with the add-on’s wording, only when an installed add-on asks for one on this show — through benecaster_marketing_consent_label. No attribute controls it, and without such an add-on there is no checkbox. It appears for free and paid tiers, logged in or not. On a paid tier the answer is saved only once the membership is created, after the card or a 3D Secure check succeeds; a declined card saves nothing.
The show must be published. For a draft, scheduled, private or trashed show the shortcode renders nothing; someone who can edit that show sees This form will appear here once the show is published. Only people who can edit the show see this note. instead. A submission for an unpublished show is refused by the server either way.
Parameters
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
show_id |
int |
— | No | ID of the show to subscribe to. Optional: with no show_id, a show page uses that show, an episode page uses its show, and anywhere else a single-show site uses its only show. On a multi-show site, on a page that is neither, it renders an inline error comment and short-circuits. **Where to find it:** every show shows a click-to-copy `#{id}` chip in its admin header (on every sub-tab) and on its card in Benecaster → Shows, including archived shows. |
tiers |
string |
all tiers
|
No | Comma-separated tier slugs to display, e.g. tiers="free,premium". Slugs must match those defined in Settings → Subscription → Tier Mapping. Omit to show all available tiers. |
style |
string |
cards
|
No | Layout style: - `cards` (default) — grid of tier cards, each showing tier name, live price, and a subscribe button; best for full-width landing pages and pricing sections - `list` — compact single-column list with name, price, and button on each row; suited for sidebars or narrow contexts - `minimal` — tier names and subscribe buttons only, no price; use when price is shown elsewhere on the page |
highlight_tier |
string |
— | No | Tier slug to visually highlight as the recommended option. Adds a visual badge or border to that tier's card or row. |
Example
<!-- Two-tier call-to-action with 'premium' highlighted -->
[benecaster_subscribe show_id="3" tiers="free,premium" highlight_tier="premium"]
<!-- All tiers, list style -->
[benecaster_subscribe show_id="3" style="list"]