Title: Swim Club Manager
Author: Melita Poropat
Published: <strong>August 26, 2026</strong>
Last modified: August 26, 2026

---

Search plugins

![](https://ps.w.org/swim-club-manager/assets/banner-772x250.png?rev=3666437)

![](https://ps.w.org/swim-club-manager/assets/icon-256x256.png?rev=3666437)

# Swim Club Manager

 By [Melita Poropat](https://profiles.wordpress.org/mebo/)

[Download](https://downloads.wordpress.org/plugin/swim-club-manager.1.2.0.zip)

 * [Details](https://wordpress.org/plugins/swim-club-manager/#description)
 * [Reviews](https://wordpress.org/plugins/swim-club-manager/#reviews)
 *  [Installation](https://wordpress.org/plugins/swim-club-manager/#installation)
 * [Development](https://wordpress.org/plugins/swim-club-manager/#developers)

 [Support](https://wordpress.org/support/plugin/swim-club-manager/)

## Description

Swim Club Manager is a WordPress plugin for managing all aspects of a swimming club:

 * **Members** — full profiles (personal info, club details, membership fees, equipment
   orders, competition entries, results) organized into tabs on a single edit screen
 * **Attendance** — per-session log with present / absent / excused status
 * **Groups & Schedules** — training groups with weekly schedule management
 * **Competition Calendar** — upcoming meets with participant tracking
 * **Competition Entries & Results** — log which disciplines a member is entered
   in per meet (including relay leg/stroke and pool length), and see their personal-
   best times automatically summarized in a year-by-year, pool-length results matrix
 * **Club Equipment Catalog** — club gear with stock and pricing info

All data is managed through the WordPress admin. Shortcodes are available for frontend
display — see **Shortcodes** below, or the full list with a copy-paste-ready syntax
on the plugin’s **Dashboard** page in wp-admin.

### Shortcodes

 * `[swimclma_groups_schedule program="competitive" season="2025-26"]` — training
   groups & weekly schedule (both attributes optional)
 * `[swimclma_competition_calendar season="2025-26"]` — upcoming competitions for
   a season
 * `[swimclma_equipment_catalog in_stock="1"]` — club equipment catalog with an “
   order via email” form
 * `[swimclma_member_list program="competitive"]` — member list (visible to logged-
   in staff only)
 * `[swimclma_attendance_stats member_id="123"]` — one member’s attendance rate
 * `[swimclma_member_results member_id="123"]` — one member’s personal-best times,
   grouped by pool length, year and discipline

### Developer Notes

**Autoloading**

Classes are loaded via Composer’s PSR-4 autoloader (`vendor/autoload.php`), required
once at the top of `swim-club-manager.php`.

    ```
    composer.json maps the `SwimClub` namespace to three base directories:
    ```

 * `SwimClub\`  `includes/`
 * `SwimClub\Admin\`  `admin/`
 * `SwimClub\Public\`  `public/`

Sub-namespaces map to subdirectories one-to-one, and the filename must match the
class name exactly (PSR-4):

 * `SwimClub\PostTypes\Member`  `includes/PostTypes/Member.php`
 * `SwimClub\Taxonomies\Age_Category`  `includes/Taxonomies/Age_Category.php`
 * `SwimClub\DB\EquipmentOrders`  `includes/DB/EquipmentOrders.php`
 * `SwimClub\Admin\Admin`  `admin/Admin.php`
 * includes/Plugin.php (`SwimClub\Plugin`, the bootstrap singleton returned by `
   swim_club_manager()`) wires up admin/public hooks, post types, taxonomies, shortcodes,
   and REST routes — each referenced class is autoloaded lazily when first instantiated,
   not eagerly required.

**Admin controllers**

    ```
    admin/Admin.php only handles enqueueing, menu registration, page-partial rendering, and meta boxes. Form/CRUD handling (the `admin_post_swimclma_*` actions) lives one-per-domain under `admin/Controllers/` (`SwimClub\Admin\Controllers\`) — `MemberController`, `GroupController`, `AttendanceController`, `CompetitionController`, `EquipmentController`, `EquipmentOrderController`, `MembershipFeeController`, `CompetitionEntryController`, `SettingsController`. Each exposes `save()` / `delete()` (and `update_status()` where relevant) and is wired directly to its `admin_post_*` hook in `Plugin::define_admin_hooks()`. They all extend the abstract `Controller` base class, which provides the shared nonce/capability guard helpers (`verify_nonce_or_die()`, `verify_request_nonce_or_die()`, `require_cap_or_die()`).
    ```

**Working with the code**

 * After pulling changes that add/rename/move a class, run `composer dump-autoload-
   o` to regenerate the optimized classmap in `vendor/`.
 * `vendor/` is committed and ships with the plugin — WordPress installs don’t run
   a Composer build step, so it must be present in the deployed copy.
 * Non-class files (admin partials, public partials, JS/CSS) are `include`d directly
   by the components that render them and are unaffected by autoloading.
 * Public-facing shortcode styles are written as Sass (`public/scss/`) — one BEM
   component per shortcode under `public/scss/components/`, shared tokens/mixins
   under `public/scss/abstracts/`, compiled to `public/css/public.css` via `npm 
   install && npm run build:css` (or `npm run watch:css` while editing). Like `vendor/`,`
   public/css/public.css` is committed and ships with the plugin — regenerate it
   after any `.scss` change, since WordPress installs don’t run this build step 
   either. It’s enqueued by `SwimClub\Public\PublicAssets::enqueue_styles()` (wired
   in `Plugin::define_public_hooks()`), which only loads it on pages whose content
   contains one of the plugin’s shortcodes.
 * `includes/Activator.php` and `includes/Deactivator.php` are autoloaded like everything
   else; they don’t need to be required manually before `plugins_loaded` since `
   register_activation_hook()`/`register_deactivation_hook()` only invoke their 
   callback once WordPress actually fires the (de)activation event, by which point
   the autoloader is already registered.

## Installation

 1. Upload the `swim-club-manager` folder to `/wp-content/plugins/`
 2. Activate through the Plugins menu
 3. Configure under **Swim Club  Settings**

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Swim Club Manager” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Melita Poropat ](https://profiles.wordpress.org/mebo/)

[Translate “Swim Club Manager” into your language.](https://translate.wordpress.org/projects/wp-plugins/swim-club-manager)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/swim-club-manager/),
check out the [SVN repository](https://plugins.svn.wordpress.org/swim-club-manager/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/swim-club-manager/)
by [RSS](https://plugins.trac.wordpress.org/log/swim-club-manager/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.2.0

 * Members list: removed the City column and adjusted the Name, Group, and Membership
   Fee column widths
 * Club Equipment list: the Size, Condition, Purchased, and Notes columns now hide
   below a 1500px viewport width for a cleaner view on smaller admin screens
 * Admin controllers refactored to share common save/delete logic via the base Controller
   class (internal, no behavior change)

#### 1.1.0

 * Members admin page reorganized into tabs: Personal Information, Club Details,
   Membership Fee Payments, Club Equipment Orders, Competition Entries, and Results
 * Competition entries: added an Edit action on the entries table, a wider result-
   time field, and a per-entry pool length (25m/50m, auto-filled from the competition)
 * Competition disciplines: added 4x50m and 4x100m Freestyle Relay; the existing
   4x50m/4x100m (medley) Relay disciplines now record which leg (1st–4th) and stroke
   a member swam
 * New: personal-bests results matrix per member — best time per pool length / year/
   discipline, with an all-time-best row and a relay results table. Available as
   the “Results” tab in admin and via the new `[swimclma_member_results]` shortcode
   on the frontend
 * New: Shortcodes list on the Dashboard page for quick copy-paste reference
 * Admin CSS and the Members admin template refactored into smaller per-component
   files for maintainability

#### 1.0.0

 * Initial release

## Meta

 *  Version **1.2.0**
 *  Last updated **3 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [attendance](https://wordpress.org/plugins/tags/attendance/)[club](https://wordpress.org/plugins/tags/club/)
   [members](https://wordpress.org/plugins/tags/members/)[sports](https://wordpress.org/plugins/tags/sports/)
   [swimming](https://wordpress.org/plugins/tags/swimming/)
 *  [Advanced View](https://wordpress.org/plugins/swim-club-manager/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/swim-club-manager/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/swim-club-manager/reviews/)

## Contributors

 *   [ Melita Poropat ](https://profiles.wordpress.org/mebo/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/swim-club-manager/)