Descripción
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\Memberincludes/PostTypes/Member.phpSwimClub\Taxonomies\Age_Categoryincludes/Taxonomies/Age_Category.phpSwimClub\DB\EquipmentOrdersincludes/DB/EquipmentOrders.php-
SwimClub\Admin\Adminadmin/Admin.phpincludes/Plugin.php (
SwimClub\Plugin, the bootstrap singleton returned byswim_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 -oto regenerate the optimized classmap invendor/. 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
included 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 underpublic/scss/components/, shared tokens/mixins underpublic/scss/abstracts/, compiled topublic/css/public.cssvianpm install && npm run build:css(ornpm run watch:csswhile editing). Likevendor/,public/css/public.cssis committed and ships with the plugin — regenerate it after any.scsschange, since WordPress installs don’t run this build step either. It’s enqueued bySwimClub\Public\PublicAssets::enqueue_styles()(wired inPlugin::define_public_hooks()), which only loads it on pages whose content contains one of the plugin’s shortcodes. includes/Activator.phpandincludes/Deactivator.phpare autoloaded like everything else; they don’t need to be required manually beforeplugins_loadedsinceregister_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.
Instalación
- Upload the
swim-club-managerfolder to/wp-content/plugins/ - Activate through the Plugins menu
- Configure under Swim Club Settings
Reseñas
No hay reseñas para este plugin.
Colaboradores y desarrolladores
«Swim Club Manager» es un software de código abierto. Las siguientes personas han colaborado con este plugin.
ColaboradoresTraduce «Swim Club Manager» a tu idioma.
¿Interesado en el desarrollo?
Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.
Registro de cambios
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
