Skip to main content

Subscriber Tenure Badges

Benecaster can show each subscriber a small chip indicating how long they have been a member. When the feature is on, the chip appears automatically wherever badge chips render — the subscriber account page, the Supporter Wall, and anywhere the [benecaster_user_badge] shortcode is placed.


Enabling the Tenure Badge

Go to Benecaster → Memberships → Badges and check Show subscriber tenure badge. Click Save settings.

The badge is off by default. Turning it on or off takes effect immediately — no caching to clear, no page edits required.


What Subscribers See

Once the badge is enabled, each subscriber sees a chip labeled with their membership milestone. Labels advance automatically as tenure grows:

Tenure Default label
1–5 months New Member
6–11 months 6-Month Member
12–23 months 1-Year Member
24–59 months 2-Year Member
60–119 months 5-Year Member
120+ months 10-Year Member

Labels update automatically when a subscriber’s tenure crosses the next threshold — there is nothing to update manually.

Tenure is calculated from the subscriber’s earliest active token, not their WordPress account creation date. A subscriber who cancelled and later re-subscribed retains their original start date.

Bringing Tenure With You From Another Platform

Someone who has backed you for four years on Patreon should not arrive labelled a New Member. When you add a supporter by hand, you can tell Benecaster when they actually started.

Go to Benecaster → Subscribers → Add subscriber manually. Between Tier and Expires at there is an optional Supporter since date. Enter the date they first started supporting you and their tenure badge reflects the time they have already put in, from the moment they are added.

Leave it blank for someone genuinely new — that is the normal case, and a blank field simply starts the clock today.

For a whole patron list, use the Migration Wizard. It reads each person’s join date from your Patreon or Supercast export and carries it across in bulk. See Migrating from Patreon. The manual form is for the odd supporter you add yourself.

On the manual form, two dates are refused outright, and when one is refused nothing at all is created — no account, no subscription, no access. (The wizard applies the same limits but never refuses a person over a date. It imports them with their tenure starting that day and lists them in its report.)

  • A date in the future. Tenure is time elapsed, so a future date has no honest label.
  • A date before 2004. Podcasting did not exist before then, so a date older than that is a mistyped year rather than a very loyal supporter. This is a fixed limit, not a setting — there is nothing to configure.

The date is read in your site’s own timezone, matching every other date Benecaster shows you.


Where the Chip Appears

The tenure chip is appended to the same badge list as tier badges and manually-assigned badges. It renders in:

  • The subscriber account page ([benecaster_account]) — in the badges area below the subscriber’s avatar
  • The Supporter Wall — on each subscriber’s card when the wall is enabled for a show
  • Anywhere you have placed the [benecaster_user_badge] shortcode

Displaying Tenure as Text

For placements where the badge chip format is not appropriate — inline in email body copy, a custom profile card, a member-only page heading — the [benecaster_member_since] shortcode outputs tenure as plain text:

[benecaster_member_since]
Format Example output
format="long" (default) Member since June 2024
format="short" 1-Year Member
format="raw" 2024-06-01

A follower with a show in context reads “Following since June 2024” instead of “Member since” — only in the default long format, and only when a show is resolved (an explicit show_id, or a single-show install). In per-user mode (no show in context) the snapshot comes from whichever token is oldest across all shows, so it always reads “Member since” there. The short, raw, and custom-format outputs are unchanged for a follower.

Any other value is treated as a custom PHP date format string and passed to WordPress’s date_i18n() — see the WordPress Formatting Date and Time reference for the full character set. For example:

[benecaster_member_since format="d/m/Y"]

renders as 01/06/2024. Literal text mixed into a custom format needs backslash-escaping (e.g. \M\e\m\b\e\r to print the word “Member” literally rather than have each letter read as a format character). An invalid or malformed format string renders through date_i18n() literally — there is no fallback to long — so double-check custom formats against the reference above before publishing.

The shortcode is gated by the same site-wide toggle — it outputs nothing when the tenure badge is disabled.


The Follower Chip

A follower is not a tier, but their badges are not blank either. When a show is in context — the Supporter Wall, or [benecaster_user_badge show_id="…"] — a follower gets a muted Follower chip in the badge list, in the slot a paying subscriber’s tier badge would fill. It never appears site-wide (the account page’s per-user badge render has no single show to attribute it to, and one person can follow one show while paying for another).

The Follower chip is independent of the tenure chip above — both are computed rows appended to the same badge list, and a follower who has followed long enough can show both at once, e.g. “Follower · 1-Year Member”.

Relationship to Tier Badges

The tenure chip sits alongside tier badges and manual badges in the same badge list — it does not replace them. A subscriber on the Gold tier who has been a member for two years will show both their tier badge(s) and their tenure chip.

Tenure badges are always read-only. They cannot be manually assigned or removed; they are computed from subscription history.


For Developers

Three filters let you customize tenure badge behavior:

See Customizing Tenure Badges for usage examples, including the recipe that composes the milestones and label filters together.

The feature is gated by TenureBadgeAppender::is_enabled() — a static method add-ons can call without touching wp_options directly.

See Also

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