Society Management
WordPress plugin for professional societies: member registration (new & student), frontend profile with certificate download and renewal, admin dashboard with analytics, configurable email templates and placeholders, SMTP, 11‑month reminders, membership numbers, CSV import/export, and automatic expiry. PHP 7.4+, WordPress 5.0+.
by Muhammad Samir · github.com/muhammadalghannam/plugin-society-management-wordpress
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/muhammadalghannam/plugin-society-management-wordpress/archive/refs/heads/main.zipA comprehensive WordPress plugin for managing society memberships, registrations, email communications, and analytics.
Author: Muhammad Samir Alghannam
Table of Contents
- Overview
- Features
- Requirements
- Installation
- Quick Start
- Shortcodes
- Admin
- Database
- File Structure
- Developer Guide
- Changelog
- Support
- License
Overview
Society Management is a full-featured WordPress plugin for professional societies and membership organizations. It handles member registration, renewals, email templates with placeholders, automated reminders, analytics, and certificate generation—all from a single admin interface.
| Capability | Description |
|---|---|
| Member registration | Frontend forms for new and student registration with file uploads |
| Profile & renewal | Member profile shortcode with certificate download and renewal flow |
| Analytics | Dashboard with Chart.js stats, payment breakdown, and trends |
| Email system | Templates, placeholders, SMTP, bulk send, and 11‑month reminders |
| Membership IDs | Configurable abbreviations and auto-generated membership numbers |
| Data | CSV import/export, membership history, and automatic expiry handling |
Features
User registration
- Shortcode:
[custom_signup] - Registration types: New Registration, Student Registration
- Fields: name, title, specialty, email, phone, DOB, addresses, password, membership type, payment method (InstaPay)
- File uploads: photo (2MB), CV (15MB), ID scans (20MB each), student card (2MB), payment receipt (80MB)
- Real-time email validation and duplicate check
- Client- and server-side validation, AJAX submit, SweetAlert2 feedback
- Redirect to login after success; country list via REST Countries API
User profile
- Shortcode:
[profile_info] - Personal and membership details, status, certificate download (active/paid)
- Renewal: button when eligible, receipt upload, status → “In Review”, history logged
Admin dashboard
- Totals: users, active/inactive, payment (Paid/Pending/Declined)
- Charts: membership type (pie), payment status (bar), registration trends (line, 12 months)
- Time filters: This month, Last month, This year
- Recent registrations table and growth metrics
User management
- Location: Society Management → Membership Applications
- DataTables: search, sort, pagination; filters by membership type, payment status, user status
- Row click → profile modal (tabs: Personal, Membership, Files, Activity, Actions)
- Actions: Activate/Deactivate, Delete, Edit (WP user edit)
- CSV import/export, bulk email with template selector
Membership numbers
- Location: Society Management → Generated ID Settings
- Format:
ABBREVIATION + 4-digit number(e.g.STU0001) - Per-type abbreviations and start numbers; bulk generate; migration from legacy
generated_idstable
Email templates
- Location: Society Management → Email Templates
- CRUD, duplicate, activate/deactivate, rich editor, preview
- Placeholders:
{full_name},{email},{phone},{generated_id},{membership_type},{registration_type},{payment_status},{paid_date},{expiry_date},{institute},{country}, file URLs,{files_table}, and{meta:KEY} - Single and bulk send; batch size 50
Automated systems
- 11‑month reminders: Daily cron; reminder 11 months after membership start; configurable template in Settings
- Membership expiry: Daily cron; set “Not Active” and “Declined” when expired; log to history (up to 100 per run)
- Renewal confirmation: Configurable template in Settings
Settings
- Location: Society Management → Settings
- SMTP (e.g. Gmail + App Password), secure storage
- Reminder and renewal email template selection
Requirements
- WordPress 5.0+
- PHP 7.4+
- MySQL 5.6+
Installation
- Upload the plugin folder to
wp-content/plugins/. - Activate the plugin via Plugins in the WordPress admin.
- Required database tables are created on activation.
Quick Start
-
Registration form
Create a page and add the shortcode[custom_signup]. -
Member profile
Create a page (e.g. “My profile”) and add[profile_info]. -
Admin
Use Society Management in the admin menu: Dashboard, Membership Applications, Generated ID Settings, Email Templates, Settings. -
SMTP
Configure SMTP under Society Management → Settings so emails send correctly.
Shortcodes
| Shortcode | Purpose |
|---|---|
[custom_signup] |
Membership registration form (new + student). |
[profile_info] |
Logged-in user’s profile, certificate download, and renewal. |
Admin
| Menu | Description |
|---|---|
| Dashboard | Analytics, charts, recent registrations. |
| Membership Applications | User list, filters, profile modal, CSV import/export, bulk email. |
| Generated ID Settings | Membership number abbreviations and generation. |
| Email Templates | Create/edit templates, placeholders, send single/bulk. |
| Settings | SMTP and reminder/renewal template selection. |
Database
The plugin uses these tables (prefix wp_ as per your install):
| Table | Purpose |
|---|---|
wp_csi_membership_numbers |
Membership number settings per type (replaces wp_csi_generated_ids in 2.0). |
wp_csi_email_templates |
Email template name, from, subject, body, placeholders, active flag. |
wp_csi_email_reminders |
Reminder log: user, template, type, sent_at, status. |
wp_csi_membership_history |
Event log: registration, renewal, status/payment changes, reminder sent, expiry. |
File Structure
custom-signup-plugin/
├── custom-signup-plugin.php # Main plugin file
├── uninstall.php
├── README.md
├── admin/
│ ├── assets/ # Global admin CSS/JS
│ └── features/
│ ├── dashboard/ # Analytics
│ ├── users/ # User list, profile modal, profile page
│ ├── membership-number/ # ID generation settings
│ ├── emails-templates/ # Template CRUD, placeholders, send
│ └── settings/ # SMTP and template config
├── shortcodes/
│ ├── registration/ # [custom_signup]
│ └── profile/ # [profile_info]
├── includes/ # DB, notifications, countries, FPDF/FPDI
├── ajax/
│ └── handlers.php
└── assets/ # CSV template, PDF certificate template
Developer Guide
Constants
CSI_VERSION— Plugin versionCSI_PLUGIN_DIR/CSI_PLUGIN_URL/CSI_PLUGIN_BASENAME— Paths and basename
Global JS (CSI)
CSI.DataTables.init(selector, options);
CSI.Swal.success(title, text, timer);
CSI.Swal.error(title, text);
CSI.Bootstrap.showModal(selector);
CSI.Notify.success(message, useSwal);
// + destroy, confirm, loading, info, hideModal, error, warning, info
PHP helpers (examples)
- Notifications:
csi_notify_success(),csi_notify_error(), etc. - Database:
CSI_Database::create_tables(),CSI_Database::get_table_name() - Users:
csi_get_admin_users(),csi_get_user_profile_data() - Templates:
csi_get_email_templates(),csi_replace_placeholders(),csi_send_template_email() - Membership IDs:
csi_get_abbreviation(),csi_assign_generated_id(),csi_get_user_membership_number() - History/expiry:
csi_log_membership_event(),csi_get_user_membership_history(),csi_is_membership_expired()
Hooks
- Actions:
csi_plugin_loaded,csi_daily_reminder_check,csi_daily_membership_expiry_check - Filters:
csi_load_assets_on_all_admin,csi_global_assets_loaded
Security
- Nonces on forms;
manage_optionsfor admin; sanitization and prepared statements; no direct file access.
Frontend stack
- Bootstrap 5.3, DataTables 1.13.6, SweetAlert2 11.7, Chart.js 4.4 (dashboard), REST Countries API.
Changelog
2.0
- Rebuild with modular admin/shortcode structure
- Analytics dashboard (Chart.js)
- Email template system and placeholders
- 11‑month reminder cron
- User profile modal and admin profile page
- CSV import/export
- Membership number system (replaces generated IDs)
- Global assets and notifications
- Registration UX: loading states, SweetAlert2, redirect after signup, email validation, student auto-type
- Renewal flow (frontend + admin)
- Membership history and timeline
- Daily membership expiry cron
- Settings: SMTP and reminder/renewal templates
- Migration from
generated_idstomembership_numbers
Support
For bugs, feature requests, or questions, please open an issue or contact the author.
License
Proprietary. All rights reserved.