Title: Rosterkeeper for Clubs
Author: Brian Raines
Published: <strong>19. august, 2026</strong>
Last modified: 10. oktober, 2026

---

Søg plugins

![](https://ps.w.org/rosterkeeper-for-clubs/assets/banner-772x250.png?rev=3655072)

![](https://ps.w.org/rosterkeeper-for-clubs/assets/icon-256x256.png?rev=3655072)

# Rosterkeeper for Clubs

 Af [Brian Raines](https://profiles.wordpress.org/bnraines/)

[Download](https://downloads.wordpress.org/plugin/rosterkeeper-for-clubs.3.22.1.zip)

 * [Detaljer](https://da.wordpress.org/plugins/rosterkeeper-for-clubs/#description)
 * [Vurderinger](https://da.wordpress.org/plugins/rosterkeeper-for-clubs/#reviews)
 *  [Installation](https://da.wordpress.org/plugins/rosterkeeper-for-clubs/#installation)
 * [Udvikling](https://da.wordpress.org/plugins/rosterkeeper-for-clubs/#developers)

 [Support](https://wordpress.org/support/plugin/rosterkeeper-for-clubs/)

## Beskrivelse

Rosterkeeper for Clubs gives a club a full membership back office inside WordPress:

 * A custom member roster (name, address, phone, email, emergency contact, expiration
   date) with a configurable, unique, sequential member number.
 * An admin screen to add, edit, search, sort, and bulk-delete members.
 * CSV import, with column mapping so it adapts to whatever spreadsheet you already
   have — fully functional: creates new members, and updates existing ones when 
   a row’s member number already matches. CSV export, and the option to choose skip-
   vs-update behavior per import, are available with the optional Pro upgrade described
   below.
 * A public `[rkfc_roster]` shortcode showing a sortable, searchable member directory,
   with configurable display rules for expired members and an admin-selectable choice
   of which fields appear as columns.
 * Online joining and renewal via two front-end forms (`[rkfc_join_form]` and `[
   rkfc_renew_form]`), each collecting the required info, a waiver/terms acceptance,
   and then payment through PayPal, Stripe, or both (see below). A successful, server-
   verified payment automatically creates or updates the member’s roster record —
   no manual data entry required.
 * **Two ways to pay, your choice.** Offer PayPal, Stripe, or both, and let members
   pick. Stripe lets members pay by card, **Apple Pay, or Google Pay** on a secure
   payment page run by Stripe, so card details never touch your website. Each club
   uses its own PayPal and/or Stripe account; payments go straight to it.
 * A self-service “update my info” form (`[rkfc_update_profile]`) that lets a member
   update their own contact info without any admin involvement — secured by emailing
   a one-time link to the address already on file, so one member can never look 
   up or edit another’s record.
 * A “resend my welcome email” form (`[rkfc_resend_welcome]`) so a member can trigger
   the configurable welcome email again by looking themselves up with member number
   + last name — no data exposure since it only resends an email, with a short cooldown
   to prevent repeated resends to the same person.
 * A choice of three membership-year models, configurable from Settings: **fixed
   season** (a defined membership year with an independently configurable in-season/
   off-season pricing window), **rolling** (a single flat annual fee, always expiring
   exactly one year from the join/renewal date), or **free** (no fee and no PayPal
   step at all — visitors still complete the join/renewal form and agree to the 
   waiver/terms).
 * A “Join Requests” log for troubleshooting online payments. Bulk “Email Members”
   is available with the optional Pro upgrade described below.
 * A manual “Send Renewal Notice” button next to each member in the admin list (
   with a “Last Notified” column so you can see at a glance who’s already been nudged),
   for a one-off configurable renewal reminder — real troubleshooting value on its
   own (e.g. a member says a notice went to spam), and every send is recorded on
   its own Renewal Notice Log page with CSV export. Want this fully automatic instead—
   up to four notices per member, timed automatically before and after expiration,
   running hands-off in the background? That’s what the optional Pro upgrade adds.
 * Every club-specific label (the member number’s name, the club’s name used in 
   payment descriptions and the waiver heading, the waiver/terms text itself) is
   editable from Settings — nothing requires touching code.
 * Optional Pro and Pro+ upgrades (see “Free, Pro, and Pro+” below) add CSV export,
   the choice of skip-vs-update behavior per CSV import, a Merge Supplemental Data
   tool, the bulk email tool, and fully automated multi-notice renewal reminders.
   The free plugin includes a real, fully-functional CSV import with no restrictions(
   see above); Email Members is a Pro tool, showing a brief upgrade message on the
   free tier in its place.

#### Free, Pro, and Pro+

**Free** (this plugin): the complete membership back office described above — roster,
admin management, CSV import, online join/renewal with PayPal or Stripe (cards, 
Apple Pay, Google Pay), the public roster, member self-service forms, and manual
renewal notices.

**Pro**: everything in Free, plus CSV export, per-import skip-vs-update control,
the Merge Supplemental Data tool, bulk Email Members, and fully automated renewal
reminders (up to four notices per member, timed before and after expiration, with
a send log).

**Pro+**: everything in Pro, plus:

 * An **event calendar**. Add club events (dates, times, location, map link, cost,
   RSVP link, category) from a new Events section, then show them on any page with
   the `[rkfc_events]` shortcode: a running list grouped by month, with a “View 
   Past Events” archive. Events move into the archive automatically once they end.
   They work under any WordPress theme.
 * The **Club Site Starter** theme, a quick-start theme for volunteer clubs with
   a guided setup wizard for your logo, color palette, fonts, hero image, and home
   page, so your club’s site is personalized in minutes. Install it from Club Members
   > Site Theme. The theme loads the fonts you choose from Google Fonts.

Pro and Pro+ are purchased from within the plugin (Club Members > Upgrade). After
you upgrade, WordPress installs the Pro version of this plugin for you in place 
of the free one — your members, settings, and shortcodes carry over unchanged, and
there is nothing to download by hand. Pro includes a 7-day free trial with no payment
required. Pro+ has no free trial, but is covered by the same money-back guarantee
as Pro. Free never stops working and has no usage limits; nothing in it is time-
limited or nagware.

#### Membership Year Models

**Fixed Season**: choose a season-start month and day (e.g. April 1) — this governs
when membership years begin and expire (memberships always expire the day before
the next occurrence of that date, e.g. March 31). Separately, an independently configurable
In-Season Window (a start month and end month, which can wrap around the year) determines
which months use the In-Season Fee versus the Off-Season Fee — this doesn’t need
to align with the season-start date at all, so pricing can match your club’s actual
activity season regardless of your fiscal year.

**Rolling**: a single flat fee, no seasonal split. Every membership expires exactly
one year from whenever it was purchased or renewed, with no fixed fiscal year.

**Free**: no fee is charged and the PayPal payment step is skipped entirely for 
both `[rkfc_join_form]` and `[rkfc_renew_form]`. Visitors still complete the full
form and must agree to the waiver/terms — membership is required, it’s just free.
Dated the same way as Rolling (one year from signup/renewal).

Switching models only affects new signups/renewals going forward; it never retroactively
changes any expiration date already on file.

### External services

This plugin connects to PayPal’s API to process membership payments for the online
join and renewal forms (`[rkfc_join_form]` and `[rkfc_renew_form]`). This only happens
when a visitor actively submits one of those forms and proceeds to pay — it does
not run in the background or on any other page.

What is sent, and to whom:

 * When a visitor clicks the PayPal button, the plugin’s server creates a PayPal
   order via PayPal’s REST API (`api-m.paypal.com` for live transactions, `api-m.
   sandbox.paypal.com` in Sandbox/testing mode), sending the membership fee amount
   and a random, non-identifying reference token.
 * The visitor’s browser then loads PayPal’s own Checkout JavaScript SDK directly
   from PayPal (`https://www.paypal.com/sdk/js`) to complete the payment on PayPal’s
   site.
 * After the visitor approves payment, the plugin’s server calls PayPal’s API again
   to capture (finalize) the transaction and confirm it succeeded, before creating
   or updating the corresponding member record.

No member contact information (name, address, email, etc.) is sent to PayPal by 
this plugin; only the payment amount and an anonymous reference token are sent as
part of the order. PayPal’s own checkout process, once the visitor is on PayPal’s
site, is governed entirely by PayPal’s own privacy policy and terms of service:

 * PayPal Privacy Policy: https://www.paypal.com/us/legalhub/privacy-full
 * PayPal User Agreement: https://www.paypal.com/us/legalhub/useragreement-full

A site administrator must configure their own PayPal API credentials (Client ID 
and Secret) under Club Members > Settings for this feature to function; it does 
nothing with PayPal until that’s done.

This plugin can also connect to Stripe’s API to process the same membership payments,
as an alternative or addition to PayPal. This is off by default and only runs once
a site administrator turns on Stripe and saves their own Stripe secret key under
Club Members > Settings > Stripe, and then only when a visitor actively chooses 
to pay by card, Apple Pay, or Google Pay. What is sent, and to whom:

 * When a visitor clicks the card button, the plugin’s server creates a Stripe Checkout
   Session via Stripe’s REST API (`api.stripe.com`), sending the membership fee 
   amount, a description (the club name plus “Membership” or “Membership Renewal”),
   and a random, non-identifying reference token.
 * The visitor’s browser is then sent to a payment page hosted by Stripe (`checkout.
   stripe.com`) to pay. Card, Apple Pay, and Google Pay details are entered only
   there and never reach your website.
 * After payment, the plugin’s server asks Stripe’s API to confirm the payment before
   creating or renewing the member record. If the site administrator also sets up
   the optional webhook, Stripe’s servers call a URL on your own site to confirm
   payments, and that call is checked against a signing secret.

No member contact information (name, address, email, etc.) is sent to Stripe by 
this plugin. Whatever the visitor enters on Stripe’s own payment page is governed
by Stripe’s terms and privacy policy:

 * Stripe Services Agreement: https://stripe.com/legal/ssa
 * Stripe Privacy Policy: https://stripe.com/privacy

This plugin also includes the Freemius SDK, which provides the optional Pro licensing,
trial, and upgrade features. The SDK does nothing until a site administrator chooses
to opt in on the Freemius screen shown after activation; you can skip it and continue
using the free plugin normally. If you opt in, Freemius receives basic diagnostic
and account information: your WordPress admin’s name and email address, the site’s
URL and title, WordPress, PHP, and plugin versions, the plugin’s active/deactivated
status, and (if you start a trial or purchase) licensing and payment-related details
handled by Freemius. Opting in to share this data is never required to use the free
plugin’s features. If you later buy or start a trial of Pro, license verification
and update delivery are handled through Freemius’s servers (`api.freemius.com`) 
and checkout (`checkout.freemius.com`).

 * Freemius Terms of Service: https://freemius.com/terms/
 * Freemius Privacy Policy: https://freemius.com/privacy/

## Skærmbilleder

[⌊Admin member list with search, sortable columns, and Active/Expired status.⌉⌊Admin
member list with search, sortable columns, and Active/Expired status.⌉[

Admin member list with search, sortable columns, and Active/Expired status.

[⌊Edit Member screen: member number, contact details, emergency contact, and expiration
date.⌉⌊Edit Member screen: member number, contact details, emergency contact, and
expiration date.⌉[

Edit Member screen: member number, contact details, emergency contact, and expiration
date.

[⌊Settings: choose a fixed-season, rolling, or free membership model, with in-season
and off-season fees.⌉⌊Settings: choose a fixed-season, rolling, or free membership
model, with in-season and off-season fees.⌉[

Settings: choose a fixed-season, rolling, or free membership model, with in-season
and off-season fees.

[⌊Settings: let members pay by card, Apple Pay, or Google Pay with Stripe (PayPal
has its own tab).⌉⌊Settings: let members pay by card, Apple Pay, or Google Pay with
Stripe (PayPal has its own tab).⌉[

Settings: let members pay by card, Apple Pay, or Google Pay with Stripe (PayPal 
has its own tab).

[⌊Activity log of online join and renewal payments, showing whether each was paid
with PayPal or Stripe.⌉⌊Activity log of online join and renewal payments, showing
whether each was paid with PayPal or Stripe.⌉[

Activity log of online join and renewal payments, showing whether each was paid 
with PayPal or Stripe.

[⌊Public roster shortcode with search and a status filter.⌉⌊Public roster shortcode
with search and a status filter.⌉[

Public roster shortcode with search and a status filter.

[⌊Online join form showing the membership price, your details form, and the waiver.⌉⌊
Online join form showing the membership price, your details form, and the waiver
.⌉[

Online join form showing the membership price, your details form, and the waiver.

[⌊Payment step: pay by card, Apple Pay, or Google Pay on a secure Stripe page (PayPal
also appears here when turned on).⌉⌊Payment step: pay by card, Apple Pay, or Google
Pay on a secure Stripe page (PayPal also appears here when turned on).⌉[

Payment step: pay by card, Apple Pay, or Google Pay on a secure Stripe page (PayPal
also appears here when turned on).

[⌊Online renewal form: members look themselves up and get a secure link by email.⌉⌊
Online renewal form: members look themselves up and get a secure link by email.⌉[

Online renewal form: members look themselves up and get a secure link by email.

## Installation

 1. Upload the plugin files to `/wp-content/plugins/rosterkeeper-for-clubs`, or install
    the zip directly via Plugins > Add New > Upload Plugin.
 2. Activate the plugin. This creates the plugin’s own database tables — no existing
    WordPress data is touched.
 3. A “Club Members” menu appears in your WordPress admin sidebar. Visit Club Members
    > Settings to configure the member number label, club name, membership-year model,
    and (if you’ll use online join/renewal) your PayPal credentials.
 4. Place `[rkfc_roster]`, `[rkfc_join_form]`, and/or `[rkfc_renew_form]` on pages 
    as needed.

A step-by-step setup guide with screenshots, for Free, PRO and PRO+, is at https://
clubrosterkeeper.com/setup-guide/

## FAQ

### Does this require PayPal or Stripe?

No. The member roster, admin management, and manual tools work without either. Only
the online join and renewal payment step needs a payment option, and you can use
PayPal, Stripe, or both.

### Does it support Apple Pay and Google Pay?

Yes, through Stripe. When Stripe is turned on, members are sent to Stripe’s secure
payment page, where Apple Pay and Google Pay appear automatically on devices and
browsers that support them (Apple Pay on iPhone, Mac, and Safari; Google Pay in 
Chrome). Apple Pay is on by default in a Stripe account; Google Pay may need to 
be switched on in your Stripe dashboard. You need your own free Stripe account.

### Can members choose how they pay?

Yes. If both PayPal and Stripe are turned on, the payment step shows both and the
member picks. If only one is on, only that one is shown.

### Can I rename “member number” to something else?

Yes. Club Members > Settings has a “Member Number Label” and a “Member Number Short
Label” field, used throughout the admin, the public roster, and the join/renewal
forms.

### What happens to existing members if I switch membership-year models?

Nothing retroactive. Changing between Fixed Season and Rolling only affects new 
signups and renewals going forward.

### Does this plugin track or phone home any usage data?

Not unless you opt in. Out of the box the only external network calls are the PayPal
API calls described above, and only when a visitor actively submits a payment form.
If you turn on Stripe, the Stripe calls described in “External services” are added,
again only when a visitor chooses to pay that way. The plugin includes the Freemius
SDK for Pro licensing; it shows an opt-in screen after activation and sends diagnostic
and account information to Freemius only if you accept. You can skip it. See the“
External services” section for exactly what is shared.

### What is the difference between Free, Pro, and Pro+?

See “Free, Pro, and Pro+” in the Description. In short: Free is the full membership
system; Pro adds CSV export, merge, bulk email, and automated renewal reminders;
Pro+ adds an event calendar and the Club Site Starter theme with its setup wizard.

### Do I have to install a separate plugin for Pro?

Not by hand. Upgrading installs the Pro version of this plugin automatically, in
place of the free version (all your data and settings are kept). If you previously
used the separate “Rosterkeeper for Clubs – CSV & Email Pro” add-on, deactivate 
and delete it after updating — the features now live in the main plugin.

### Is there a free trial?

Pro offers a 7-day trial that does not require a payment method. Pro+ has no free
trial, but is covered by the same money-back guarantee as Pro.

### Do I have to use the Club Site Starter theme to use Pro+?

No. The event calendar works under any WordPress theme. The Club Site Starter theme
is included with Pro+ for clubs that want a ready-made site, but it is optional.

### What happens to my events and theme if my Pro+ license ends?

Nothing is deleted. The theme stays installed and keeps working, and your events
stay saved. The event calendar and the Events editor are available only while a 
Pro+ license is active, so a page containing `[rkfc_events]` will show nothing to
visitors until the license is renewed.

## Anmeldelser

Der er ingen anmeldelser for denne widget.

## Bidragsydere & udviklere

“Rosterkeeper for Clubs” er open source-software. Følgende personer har bidraget
til dette plugin.

Bidragsydere

 *   [ Brian Raines ](https://profiles.wordpress.org/bnraines/)

[Oversæt “Rosterkeeper for Clubs” til dit eget sprog.](https://translate.wordpress.org/projects/wp-plugins/rosterkeeper-for-clubs)

### Interesseret i udvikling?

[Gennemse koden](https://plugins.trac.wordpress.org/browser/rosterkeeper-for-clubs/),
tjek [SVN repository](https://plugins.svn.wordpress.org/rosterkeeper-for-clubs/),
eller abonner på [udviklerloggen](https://plugins.trac.wordpress.org/log/rosterkeeper-for-clubs/)
via [RSS](https://plugins.trac.wordpress.org/log/rosterkeeper-for-clubs/?limit=100&mode=stop_on_copy&format=rss).

## Ændringslog

#### 3.22.1

 * New: a step-by-step setup guide, with screenshots, for Free, PRO and PRO+. Open
   it from Club Members > Help & Support.
 * Pro and Pro+: the “Got it” and “Copy link” buttons on the digital card page now
   match the other buttons.

#### 3.22.0

 * Pro and Pro+: digital membership card. Members get a private card page on their
   phone (club number and last name, then a one-time link by email) that shows their
   status and valid-through date and can be saved to the home screen. Members can
   sign out of every phone, and you can see and remove a member’s saved phones on
   their record.
 * Pro and Pro+: club activities. Any member (or only the leaders you choose) can
   start an activity, share its link or QR code, and let others join. From 15 minutes
   before the start, the people on the activity can see who is there and open anyone’s
   emergency contact. Every look is logged and the host is told by a banner and 
   an email. Access closes 8 hours after the start, or when the host ends it.
 * Pro and Pro+: guests. A non-member can ask to join with their own details, an
   emergency contact and the same waiver members accept; the host approves each 
   guest. Guest contact details are deleted after 30 days and waiver records after
   18 months (both adjustable).
 * Pro and Pro+: a “Can lead activities” setting on each member (member screen, 
   list column and bulk actions, and the CSV import and export), a Club Activities
   tab in Settings, and a Club Activities record screen with exports.
 * Pro+: an activity can appear on the club calendar with a link to join it.
 * The welcome email and renewal reminders now include a link to the member’s card
   page when your site has one.

#### 3.21.1

 * Fixed: the Edit link in the member list, the Add New and Import & Export buttons
   on that page, and the return after saving opened a “not allowed to access this
   page” error. They now open the right screens, and old bookmarks forward to them.
 * Fixed: setting a member to In Memoriam did not stick when editing that member
   from the member screen.

#### 3.21.0

 * Pro+: repeating events in the event calendar. In the new Repeat box on any event
   choose daily, every weekday, weekly (pick the days), monthly (the same date, 
   or for example the first Tuesday or last Friday) or yearly, every 1 to 30 of 
   those, and end it on a date or after a number of events. A preview shows exactly
   which dates will be created. Each date is a normal event: change one date, this
   and all following, or the whole series, and a date you delete stays deleted. 
   A series runs up to 104 events or two years (ten years for yearly events). An
   optional “Repeats …” note appears on the public list.

#### 3.20.0

 * Pro+: the Club Site Starter theme (now version 0.32.1) can show up to four hero
   images as a slideshow behind your club name. Choose the images in the hero step
   of Club Site Setup, then pick fade or slide and the time per image under Site
   Settings. The text and buttons stay in place, visitors get a small pause button,
   and people whose device is set to reduce motion see just the first image. One
   image works exactly as before.

#### 3.19.0

 * Pro+: the Club Site Starter theme (now version 0.31.0) adds Social Links. Show
   round icons for Facebook, Instagram, Strava, RideWithGPS, Discord, YouTube, X,
   TikTok, WhatsApp, Meetup, Bluesky and email, plus any number of your own links
   with a name and icon, under the hero button and in the footer. Set them up under
   Club Site Setup > Social Links. An icon only shows once you fill it in.
 * The plugin description now mentions Stripe as well as PayPal.

#### 3.18.1

 * Updated Freemius SDK to the latest version.

#### 3.18.0

 * Simplified the Club Members admin menu. Join Requests and the renewal logs now
   live together under one “Activity” page with a tab for each. Settings is unchanged.“
   Help” is now “Help & Support” and includes a Contact Support button. Old page
   addresses forward to their new locations, so bookmarks keep working.
 * Pro and Pro+ pages moved into the same tabs: Automated Renewals (Settings) and
   the Automated Renewal Log (Activity), plus Site Theme (Settings) on Pro+.
 * Fixed two links on the Settings page that pointed at pages that no longer existed.

#### 3.17.0

 * Added Stripe as a second way to pay, alongside PayPal. Members can pay by card,
   Apple Pay, or Google Pay on a secure Stripe-hosted payment page. Turn it on under
   Club Members > Settings > Stripe (it is off by default; PayPal keeps working 
   exactly as before). If both are on, members choose. The Join Requests log now
   shows which one was used.
 * Fixed: on block themes (such as Twenty Twenty-Five and other recent default themes)
   the PayPal button could fail to appear on the join and renewal payment step, 
   because the page’s payment settings were not being delivered. This affected every
   theme that renders page content before scripts are registered.
 * Pro: if the old standalone “CSV & Email Pro” add-on is still active, the plugin
   now shows a notice asking you to remove it instead of stopping with a fatal error.

#### 3.16.0

 * Added the Pro+ plan. Pro+ includes everything in Pro, plus an event calendar (
   Events section and the `[rkfc_events]` shortcode, working under any theme) and
   the Club Site Starter theme with its guided setup wizard, installed from Club
   Members > Site Theme. Free and Pro features are unchanged.
 * A page containing `[rkfc_events]` no longer shows the raw shortcode text when
   the event calendar isn’t active; visitors see nothing and administrators see 
   a short note.

#### 3.15.3

 * Fixed a fatal error (“Cannot redeclare function”) when starting a Pro trial or
   upgrading. During the switch from the free to the Pro version, both could load
   at the same moment and declare the same functions. The plugin now yields cleanly
   to whichever version is being activated.

#### 3.15.1

 * Readme update: clarified the Free and Pro tiers and the Freemius disclosure. 
   No code changes.

#### 3.15.0

 * Added an optional Pro upgrade via Freemius. Pro features (CSV export, merge tool,
   bulk email, automated renewal reminders) now ship in the Pro version of this 
   plugin, installed automatically when you upgrade or start a 7-day trial, replacing
   the separate “CSV & Email Pro” add-on. Nothing in the free plugin changed or 
   was restricted. Freemius’s opt-in screen is optional; see “External services”.

#### 3.14.5

 * Security fix: the renewal lookup (member number + last name) immediately
    displayed
   a member’s full contact details on-screen — address, phone, email, emergency 
   contact — with no further verification. Since member number and last name are
   both effectively public (the roster page already shows both), this meant anyone
   could pull up any member’s full details just by guessing or reading their public
   roster entry. The lookup now only ever sends a one-time secure link to the email
   address already on file, mirroring the same pattern already used by the Update
   Profile flow; no details are shown on-screen until that emailed link is clicked.
   The same neutral confirmation message is shown regardless of whether a match 
   was found, so this step also can’t be used to test which member numbers exist.

#### 3.14.3

 * A second WordPress.org review round found that several identifiers
    introduced
   by the 3.14.0 rename were still using the old, too-short bcm- prefix rather than
   the plugin’s actual rkfc_ prefix — admin menu/submenu page slugs (bcm-members,
   bcm-settings, etc.), several script handles and a localized JS object name, and
   a stray hidden form field. All renamed to match. This also affected each of the
   5 shortcodes’ bcm_-prefixed backward-compatibility aliases added in 3.14.0 (e.
   g. [bcm_roster]) — the directory’s prefix-length requirement applies to every
   declared identifier without exception for backward-compat aliases, so those have
   been removed. Only the current, correctly-prefixed shortcode names ([rkfc_roster],[
   rkfc_join_form], [rkfc_renew_form], [rkfc_update_profile], [rkfc_resend_welcome])
   are registered as of this version. If you have any of the old [bcm_*] shortcodes
   already embedded in existing page content, they will need to be manually updated
   to the current names — this affects any site still running a pre-3.14.0 install
   that upgrades directly to this version.

#### 3.14.2

 * Two lingering references to “riding/activity season” (in the Help text
    and the
   live Settings page for the In-Season Window field) still leaned cycling-specific
   despite the rest of the plugin being genericized for any club type — caught while
   rebuilding the admin screenshot gallery. Shortened to just “activity season.”

#### 3.14.1

 * Minor follow-up to 3.14.0’s rename: the one-time migration’s RENAME TABLE
    statement
   used raw string interpolation for the table names instead of $wpdb->prepare()
   with a placeholder. Not a real injection risk (the values come entirely from 
   $wpdb->prefix plus hardcoded literals, never user input), but there’s no reason
   not to use the sanctioned %i identifier placeholder here instead, so switched
   to that.

#### 3.14.0

 * Renamed the plugin from “Club Member Manager” to “Rosterkeeper for Clubs”
    (slug:
   rosterkeeper-for-clubs) following a WordPress.org review finding that the previous
   name was too generic and similar to existing plugin names in this space. The 
   internal prefix used throughout the codebase also changed from bcm_ to rkfc_ (
   4+ characters, per directory requirements) — functions, classes, option keys,
   database tables, and shortcode tags.
 * Existing installs upgrade transparently: a one-time migration on this
    version
   renames the plugin’s three database tables and copies over all stored settings
   from their old names to the new ones automatically, and every shortcode ([bcm_roster],[
   bcm_join_form], [bcm_renew_form], [bcm_update_profile], [bcm_resend_welcome])
   keeps working under its old name indefinitely alongside the new one, so no existing
   page content or member data is affected by the rename.

#### 3.13.4

 * Fixed a real WordPress.org compliance issue flagged during review: the CSV
    import
   previously skipped updating existing members on a duplicate member number even
   though the capability to do so (RKFC_DB::update_member()) already existed and
   was used elsewhere in this same plugin, and the UI marketed that as a Pro-only
   upgrade. This is exactly the kind of artificially-restricted-feature pattern 
   the directory guidelines prohibit, even when the underlying code is already present.
   The free import now genuinely creates or updates as appropriate, with no restriction.
   Pro’s real remaining differentiators for this feature are CSV export, choosing
   skip-vs-update behavior per import, and Merge Supplemental Data — each a genuinely
   separate capability, not a hobbled version of this one.
 * Also fixed three inline

#### 3.13.3

 * Fixed several defaults that still referenced this plugin’s original club (Solomons
   Island Cycling) instead of being genuinely generic: the Club Name field defaulted
   to “Solomons Island Cycling” instead of a neutral placeholder, the Member Number
   labels defaulted to “SIC Number”/”SIC #”, the PayPal Business Email field pre-
   filled with a real-looking but non-functional address, and — most significantly—
   the default liability waiver text was a real, bicycling-specific legal document
   that named a real third-party organization and “Solomon Island Cycling” directly
   in the legal language itself. The waiver default is now a genuinely generic, 
   activity-agnostic starting template that automatically substitutes the site’s
   actual configured club name wherever it appears, rather than requiring the admin
   to manually find and edit a name buried in a wall of legal text.

#### 3.13.2

 * Renamed the “Renewal Notice Log” menu item to “Manual Renewal Log” — when the
   Pro add-on is also active, it registers its own separate log page under the same
   name, so an admin running both would see two identically-labeled menu items with
   no way to tell them apart. Pro’s equivalent is being renamed to “Automated Renewal
   Log” in the same update for clear symmetry.

#### 3.13.1

 * Fixed a real, blocking issue Plugin Check caught: the new CSV import used move_uploaded_file(),
   which is on WordPress’s forbidden-functions list (not just discouraged — an actual
   error). Replaced it with wp_handle_upload(), the sanctioned WordPress function
   for this exact purpose, redirected to the plugin’s own protected uploads subdirectory
   via a temporary upload_dir filter. This also resolved a related unsanitized-input
   warning on the raw $_FILES access, since wp_handle_upload() is the recognized-
   safe way to consume it.

#### 3.13.0

 * Added a real, free CSV import to Import & Export (Club Members > Import & Export)—
   same column-mapping upload flow as Pro, create-only by design (a row whose member
   number already exists is skipped rather than updated; Pro’s smart update-on-duplicate,
   CSV export, and Merge Supplemental Data remain real, distinct Pro capabilities).
   The page now also shows a disabled preview of exactly what Pro adds. Also fixed
   the “Learn More About Pro” link, which was still pointing at an old placeholder
   URL from before the real product site existed.

#### 3.12.1

 * Fixed the same multi-line ignore-comment gap (phpcs:ignore only covers one line)
   in the new Renewal Notice Log page’s notice display — the same lesson learned
   the hard way twice already elsewhere in this plugin, now caught before shipping
   this time via a deliberate self-check rather than another round-trip. Also added
   a justified ignore for the CSV export’s use of php://output, a PHP stream representing
   the HTTP response itself rather than a real file — WP_Filesystem has no equivalent
   for it, so there’s no actual alternative to switch to.

#### 3.12.0

 * Added manual renewal notices: a “Send Renewal Notice” button next to each member
   in the admin list, a “Last Notified” column, a configurable one-off email template(
   Settings > Renewal Notices), and its own Renewal Notice Log page with CSV export.
   Fully manual by design — no automated matching or cron — and stays available 
   even alongside the Pro add-on’s automated version, since it serves a genuine,
   distinct troubleshooting purpose (e.g. resending to a member whose notice went
   to spam). The new Settings tab also shows exactly what Pro’s automated four-notice
   system looks like, for anyone deciding whether to upgrade.

#### 3.11.4

 * Fixed the same multi-line ignore-comment gap in get_members() that 3.11.3 fixed
   elsewhere — the comment was positioned above the wrong line for a multi-line 
   prepare() call. Did a full sweep of every ignore comment in the codebase afterward
   to confirm no others have the same issue.

#### 3.11.3

 * All remaining Plugin Check findings are now either mathematically-verified-safe
   scanner false positives (documented inline) or the expected, non-blocking custom-
   table caching warnings — nothing left that indicates an actual bug. Fixed a multi-
   line ignore-comment gap (phpcs:ignore only covers one line; a 3-line ternary 
   needed phpcs:disable/enable instead) and added a fully justified, verified-by-
   hand ignore for get_members()’s variable-length search-clause query, where the
   scanner can’t trace a placeholder count that depends on another variable’s own
   length.

#### 3.11.2

 * Eliminated the last two spots where a query string was assigned to a variable
   before being passed to $wpdb->prepare() on a later line — functionally safe either
   way, but now inlined directly as prepare()’s own argument so there’s nothing 
   left for a reviewer (automated or human) to trace by hand. Also covered a second
   settings-save array-checkbox field that had the same nonce-verification tracing
   gap as the bulk-delete fix from the previous release.

#### 3.11.1

 * Follow-up Plugin Check pass: rewrote three database queries (sic_exists, get_members,
   get_members_for_email, get_member_status_counts) that used conditional/incremental
   SQL-string building — functionally correct, but the automated scanner couldn’t
   trace variable interpolation across lines to verify it, and a human reviewer 
   would have the same difficulty at a glance, so these are now fully explicit per
   code path. Also fixed several nonce-verification ignore-comments that were only
   covering an outer `if` line and missing the actual data reads inside, and simplified
   the member-number sanitization pattern (a `preg_replace()` step was preventing
   the scanner from recognizing it as sanitized even though the final `absint()`
   made it safe either way).

#### 3.11.0

 * WordPress.org submission readiness pass: rewrote all database queries to use 
   the modern `%i` identifier placeholder instead of concatenating table names into
   SQL strings (now requires WordPress 6.2+), fixed several i18n and output-escaping
   issues flagged by the official Plugin Check tool, corrected an outdated plugin
   description that still referenced CSV import/export (moved to the Pro add-on 
   back in 3.0.0), and removed the now-discouraged load_plugin_textdomain() call
   in favor of WordPress’s automatic translation loading.

#### 3.10.2

 * The admin menu icon now uses a small custom card mark instead of the generic 
   WordPress “groups” icon, matching the plugin’s actual branding.

#### 3.10.1

 * The public roster’s member count now reads “X active members, Y in memoriam” 
   instead of a single combined total — expired members are excluded from the “active”
   count (they’re neither active nor in memoriam), and In Memoriam members are no
   longer counted alongside active members. Searching or filtering the roster still
   switches to a “Showing X of Y” count as before; clearing the filter restores 
   the active/memoriam breakdown.

#### 3.10.0

 * Added configurable public roster columns: Club Members > Settings > Roster Display
   now has a checkbox for every available field (member number, name, address, city,
   state, zip, phone, email, emergency contact name/phone, expiration) — any combination
   can be shown on the [rkfc_roster] shortcode. Address, phone, email, and emergency
   contact fields are flagged as sensitive in the UI since they’d be publicly visible
   if enabled. Defaults to the original fixed column set (member number, name, city,
   state, expiration), so existing sites look identical until an admin actively 
   customizes this.

#### 3.9.0

 * Added a third membership model: Free. No fee is charged and the PayPal payment
   step is skipped entirely, but visitors still complete the full join/renewal form
   and must agree to the waiver/terms. Dated the same way as Rolling (expires exactly
   one year after signup/renewal).
 * Fixed Season model: the “in-season” pricing window is now independently configurable(
   a start month and end month, can wrap around the year) instead of being locked
   to a fixed 6 months starting at the Season Start Date. This lets a club price
   around its actual riding/activity season regardless of when its fiscal year begins.
 * Rolling model confirmed single-fee, no seasonal split (this was already the case,
   just clarified).
 * Settings > Membership Year & Pricing reorganized into three boxes (Fixed Season/
   Rolling / Free) with only the box matching the selected model shown at a time,
   instead of all fee fields being visible regardless of which model is active.
 * Fixed: the fee summary on the join form and renewal-confirm screen no longer 
   mislabels Rolling or Free memberships as “Off-season.”

#### 3.8.0

 * Fixed: jumping to a specific page number in the All Members list (typing a number
   and pressing Enter) could result in a blank screen. The bulk-delete form now 
   submits back to the same page instead of a separate endpoint, and correctly ignores
   non-bulk-delete submissions (like the page-jump field) instead of misrouting 
   them.
 * Fixed: the waiver/terms checkbox on the join and renewal forms was too small 
   to comfortably tap on mobile — increased to a proper touch-friendly size.

#### 3.7.0

 * Added `[rkfc_resend_welcome]`: lets a member resend themselves the configurable
   welcome email by entering their member number + last name. Lower-risk than the
   profile-update flow since it only resends an email (never exposes or changes 
   data), so it skips the magic-link step — but still shows a neutral message regardless
   of match, and enforces a 5-minute per-member cooldown to prevent repeated resends
   to the same person.

#### 3.6.0

 * Settings page reorganized into tabs (General, Membership Year & Pricing, Roster
   Display, Signup Details, PayPal Credentials) for easier navigation — no settings
   changed or moved in meaning, just regrouped and easier to find. All fields still
   save together in one form regardless of which tab is active.

#### 3.5.0

 * Added a configurable welcome email, sent automatically right after a brand-new
   member successfully joins online (never for renewals). Subject, body, and enable/
   disable are all editable under Club Members > Settings, with placeholders for
   the member’s name, member number, expiration date, and club name.

#### 3.4.0

 * Editing, deleting, or bulk-deleting a member now returns you to the exact same
   spot in the All Members list afterward (same page number, sort order, and search
   filter) instead of always resetting to the first page.

#### 3.3.0

 * Added `[rkfc_update_profile]`: a self-service “update my info” shortcode. Members
   identify themselves with their member number + last name, then a one-time secure
   link is emailed to whatever address is already on file (never shown on-screen,
   never sent to an address the visitor types in) — this is what actually grants
   access, preventing one member from looking up or editing another’s record even
   though member number, name, city, and state are already public on the roster.
   Email address itself stays admin-only; every other contact field is editable.

#### 3.2.0

 * Added two new database helpers (find_members_by_name, fill_blank_fields) used
   by the Pro add-on’s new “Merge Supplemental Data” tool — no change in behavior
   for the free plugin itself.

#### 3.1.0

 * Added a “Help” admin page: a reference for the three shortcodes, a recommendation
   for setting up reliable email delivery (WP Mail SMTP), and a plain-language explanation
   of every Settings field.

#### 3.0.0

 * CSV Import/Export and Email Members moved to a separate paid add-on, “Club Member
   Manager – CSV & Email Pro” (sold separately, not on WordPress.org). The free 
   plugin still shows these menu items with an upsell screen; installing the add-
   on replaces the upsell with the real tools in the same spot. This keeps the free
   plugin’s core member-management, roster, and online join/renewal features completely
   free and unrestricted, per WordPress.org’s rules against locking core functionality
   behind payment.

#### 2.1.0

 * Completed full internationalization (i18n): every user-facing string in the admin,
   public shortcodes, and join/renewal forms is now wrapped for translation under
   the `club-member-manager` text domain.

#### 2.0.0

 * Renamed the plugin (and its slug/folder) to Club Member Manager, ahead of public
   distribution.
 * Genericized all club-specific terminology: configurable member number label, 
   club name, and a choice between Fixed Season or Rolling membership-year models.
 * Removed hardcoded credentials from the codebase; added a proper license header
   and this readme.txt in WordPress.org’s required format.

#### 1.9.x

 * Added configurable “Member Number” and “Member Number Short” labels, and a configurable
   club name, used throughout the admin, roster, and join/renew forms.

#### 1.8.x

 * Added required Emergency Contact Name/Phone fields to the online join and renewal
   forms and the admin member record.

#### 1.7.x

 * Added CSV export and a bulk “Email Members” tool with Active/Expired filtering.
 * Added a one-time tool to correct expiration dates for members created before 
   the March 31 convention was adopted.

#### 1.6.x

 * Switched the default membership-year expiration convention from April 1 to March
   31 (the correct last day of membership).
 * Fixed the online renewal flow’s redirect handling.
 * Differentiated the post-payment success message for renewals vs. new joins.

#### 1.5.x

 * Added the online renewal flow (`[rkfc_renew_form]`): SIC/member-number + last-
   name lookup, a pre-filled confirm/edit step, and PayPal payment, extending the
   member’s expiration date appropriately for on-time vs. lapsed renewals.

#### 1.4.x

 * Added a configurable grace period after which expired members are grayed out,
   then dropped, from the public roster.

#### 1.3.x

 * Added a “Total Members” count to the public roster, and a manual/automatic purge
   tool for the online join-request log.

#### 1.2.x

 * Added the online join flow (`[rkfc_join_form]`): a public form, PayPal Checkout
   payment, and server-verified automatic roster creation with sequential member-
   number assignment.

#### 1.1.0

 * Added “In Memoriam” membership type, excluding those members from expiration-
   based filtering while keeping them listed as a tribute.

#### 1.0.0

 * Initial release: member roster, CSV import, admin management, and the public 
   roster shortcode.

## Meta

 *  Version **3.22.1**
 *  Senest opdateret **18 timer siden**
 *  Aktive installationer **Færre end 10**
 *  WordPress-version ** 6.2 eller højere **
 *  Testet op til **7.1.3**
 *  PHP-version ** 7.4 eller højere **
 *  Sprog
 * [English (US)](https://wordpress.org/plugins/rosterkeeper-for-clubs/)
 * Tags
 * [club management](https://da.wordpress.org/plugins/tags/club-management/)[CSV Import](https://da.wordpress.org/plugins/tags/csv-import/)
   [member directory](https://da.wordpress.org/plugins/tags/member-directory/)[membership](https://da.wordpress.org/plugins/tags/membership/)
   [paypal](https://da.wordpress.org/plugins/tags/paypal/)
 *  [Avanceret visning](https://da.wordpress.org/plugins/rosterkeeper-for-clubs/advanced/)

## Bedømmelser

Der er endnu ikke indsendt nogen anmeldelser.

[Din anmeldelse](https://wordpress.org/support/plugin/rosterkeeper-for-clubs/reviews/#new-post)

[Se alle anmeldelser](https://wordpress.org/support/plugin/rosterkeeper-for-clubs/reviews/)

## Bidragsydere

 *   [ Brian Raines ](https://profiles.wordpress.org/bnraines/)

## Support

Har du noget at sige? Har du brug for hjælp?

 [Vis supportforum](https://wordpress.org/support/plugin/rosterkeeper-for-clubs/)