{"id":353400,"date":"2026-09-04T11:37:17","date_gmt":"2026-09-04T11:37:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/effortless-association-member-manager\/"},"modified":"2026-09-04T11:36:49","modified_gmt":"2026-09-04T11:36:49","slug":"effortless-association-member-manager","status":"publish","type":"plugin","link":"https:\/\/vec.wordpress.org\/plugins\/effortless-association-member-manager\/","author":23148025,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.12.93","stable_tag":"2.12.93","tested":"7.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"EffortLess Association Member Manager","header_author":"domclic","header_description":"Manage association members as WordPress users, with membership roles, subscription dates, payment history, and CSV export.","assets_banners_color":"","last_updated":"2026-09-04 11:36:49","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/id7.dev\/donate\/?plugin=effortless-association-member-manager","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":31,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.12.93":{"tag":"2.12.93","author":"domclic","date":"2026-09-04 11:36:49","revision":3681127}},"upgrade_notice":{"2.9.0":"<p>Major update: Email templates now use Custom Post Type for better management. Full WordPress admin UI with meta boxes, live preview, and click-to-insert placeholders. Automatic migration from old storage. Fully backward compatible.<\/p>","2.8.0":"<p>Major multisite improvement update. Network Admin Settings for multisite mode. Critical fixes for email verification, migration data consolidation, mode-aware user deletion, and role fallback. Highly recommended for all multisite installations.<\/p>","2.7.1":"<p>Security and performance update. Fixes SQL injection vulnerability, improves caching for better performance, and adds proper sanitization to all inputs. All users are strongly encouraged to update.<\/p>","2.7.0":"<p>Major update with complete per-site data isolation for multisite installations. New data migration tools allow easy switching between Global and Per-Site modes without data loss. Backward compatible - existing data will continue to work. Highly recommended for all multisite users.<\/p>","2.6.0":"<p>Major update with multisite management modes (Global\/Per-Site), security improvements, and bug fixes. Highly recommended for all multisite installations. Single-site users benefit from code quality improvements and security fixes.<\/p>","2.5.5":"<p>Bug fix release. Settings page now properly displays all configuration options including subscription duration. Update recommended for all users.<\/p>","2.5.4":"<p>This version adds sortable members list and changes name display to &quot;Last First&quot; format. Existing member names will be automatically updated on upgrade. Recommended for all users.<\/p>","2.5.3":"<p>Bug fixes for trombinoscope feature. Update recommended.<\/p>","2.5.2":"<p>This version adds complete translation support. If you&#039;re using the plugin in a non-English language, this update is highly recommended. All strings are now ready for translation via .po\/.mo files.<\/p>","2.5.0":"<p>Significant UI improvements and new features including profile photos and expiration warnings. Recommended update for all users.<\/p>","2.0.0":"<p>Major update with subscription management. Please backup your database before upgrading.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.12.93"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Members List - Sortable overview with \"Last First\" name format","2":"Add New Member - User-friendly form for adding members","3":"Member Contributions - Detailed payment history for individual members","4":"Subscriptions List - Complete view of all subscriptions","5":"Roles Management - Create and manage custom membership roles","6":"Dashboard Statistics - Quick overview of membership metrics","7":"CSV Export - Flexible export options with filtering","8":"Settings Page - Configure subscription defaults and email settings"}},"plugin_section":[262246],"plugin_tags":[8874,2156,1919,1932,4079],"plugin_category":[41,58],"plugin_contributors":[241557],"plugin_business_model":[],"class_list":["post-353400","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-association","plugin_tags-management","plugin_tags-members","plugin_tags-membership","plugin_tags-subscriptions","plugin_category-communication","plugin_category-user-management","plugin_contributors-domclic","plugin_committers-domclic"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/effortless-association-member-manager.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>EffortLess Association Member Manager stores each association member as a WordPress user with additional profile fields (role, subscription start and end dates, payment history, profile photo). It adds a <strong>Members<\/strong> admin menu for listing, adding, editing and trashing members, a Roles screen for defining membership roles with priority levels, a Subscriptions screen for tracking active, expiring and expired memberships, CSV export\/import, and email templates sent through a queued cron job. On WordPress Multisite it can run in Global mode (one shared member list for the network) or Per-Site mode (each site keeps its own list).<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Member Management<\/strong> - Add, edit, and delete members with detailed profiles<\/li>\n<li><strong>Sortable Members List<\/strong> - Click column headers to sort members by last name (ascending\/descending)<\/li>\n<li><strong>Subscription Tracking<\/strong> - Monitor active, expired, and expiring subscriptions<\/li>\n<li><strong>Role Management<\/strong> - Create custom roles with priority levels (Board Members, Regular Members, etc.)<\/li>\n<li><strong>Payment History<\/strong> - Track all member contributions and subscription renewals<\/li>\n<li><strong>Multi-site Support<\/strong> - Works with WordPress Multisite with Global or Per-Site member management modes<\/li>\n<li><strong>CSV Export<\/strong> - Export member lists with filtering options<\/li>\n<li><strong>Profile Photos<\/strong> - Members can upload profile pictures via WordPress Media Library<\/li>\n<li><strong>Dashboard Statistics<\/strong> - View total members, active subscriptions, and expiring memberships at a glance<\/li>\n<li><strong>Automated Notifications<\/strong> - Visual indicators for memberships expiring within 30 days<\/li>\n<li><strong>Configurable Settings<\/strong> - Set default subscription amounts, durations, and email preferences<\/li>\n<li><strong>Translatable<\/strong> - Interface strings are wrapped for translation under the plugin's text domain<\/li>\n<li><strong>Responsive Design<\/strong> - Mobile-friendly admin interface<\/li>\n<\/ul>\n\n<h4>Intended For<\/h4>\n\n<ul>\n<li>Non-profit organizations<\/li>\n<li>Professional associations<\/li>\n<li>Sports clubs<\/li>\n<li>Alumni associations<\/li>\n<li>Community groups<\/li>\n<li>Membership-based organizations<\/li>\n<\/ul>\n\n<h3>Additional Information<\/h3>\n\n<h4>Privacy Policy<\/h4>\n\n<p>This plugin stores member information including names, email addresses, phone numbers, and addresses in your WordPress database. It does not send any data to external services. You are responsible for complying with privacy regulations (GDPR, etc.) when using this plugin.<\/p>\n\n<h4>Display Name Format<\/h4>\n\n<p>As of version 2.5.4, member names are displayed as \"Last Name First Name\" (without comma) to make alphabetical sorting by family name more intuitive. This format is applied automatically to new members and can be applied to existing members via the Settings page.<\/p>\n\n<h4>Settings Configuration<\/h4>\n\n<p>As of version 2.5.5, all settings are properly displayed and configurable:\n- <strong>Subscription Settings<\/strong>: Set default amounts, durations, and reminder thresholds\n- <strong>Email Settings<\/strong>: Configure sender name and email address for notifications\n- <strong>Database Tools<\/strong>: Maintain your data with cleanup and update utilities<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Developed with \u2764\ufe0f for associations and membership organizations worldwide.<\/p>\n\n<p>Special thanks to all contributors and translators who help make this plugin better.<\/p>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel<\/li>\n<li>Navigate to Plugins &gt; Add New<\/li>\n<li>Search for \"EffortLess Association Member Manager\"<\/li>\n<li>Click \"Install Now\" and then \"Activate\"<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin zip file<\/li>\n<li>Extract the zip file<\/li>\n<li>Upload the <code>effortless-association-member-manager<\/code> folder to <code>\/wp-content\/plugins\/<\/code> directory<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<\/ol>\n\n<h4>After Activation<\/h4>\n\n<ol>\n<li>Navigate to <strong>Members<\/strong> in your WordPress admin menu<\/li>\n<li>Configure your membership roles in <strong>Members &gt; Roles<\/strong><\/li>\n<li>Set default subscription amount and duration in <strong>Members &gt; Settings<\/strong><\/li>\n<li>Start adding members via <strong>Members &gt; Add Member<\/strong><\/li>\n<li>(Optional) Go to <strong>Members &gt; Settings<\/strong> and click <strong>\"Update to Last First Format\"<\/strong> to format existing member names<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20add%20a%20new%20member%3F\"><h3>How do I add a new member?<\/h3><\/dt>\n<dd><p>Navigate to Members &gt; Add Member in your WordPress admin. Fill in the required information (first name, last name, email) and optionally assign a role and add an initial subscription.<\/p><\/dd>\n<dt id=\"how%20do%20i%20configure%20default%20subscription%20settings%3F\"><h3>How do I configure default subscription settings?<\/h3><\/dt>\n<dd><p>Go to Members &gt; Settings. You can configure:\n- Overdue Reminder Threshold (days after expiration before first reminder)\n- Reminder Frequency (days between reminder emails)\n- Default Subscription Amount (in euros)\n- Default Subscription Duration (in months)\n- Email From Name and Address<\/p><\/dd>\n<dt id=\"how%20do%20i%20sort%20the%20members%20list%3F\"><h3>How do I sort the members list?<\/h3><\/dt>\n<dd><p>Click on the \"Member\" column header in the Members List. Each click toggles between ascending and descending order. Members are sorted by last name by default.<\/p><\/dd>\n<dt id=\"how%20are%20member%20names%20displayed%3F\"><h3>How are member names displayed?<\/h3><\/dt>\n<dd><p>Member names are displayed as \"Last Name First Name\" (e.g., \"Smith John\") and sorted alphabetically by last name for easy lookup.<\/p><\/dd>\n<dt id=\"can%20i%20track%20subscription%20history%20for%20each%20member%3F\"><h3>Can I track subscription history for each member?<\/h3><\/dt>\n<dd><p>Yes! Click on the \"Contributions\" icon next to any member in the Members List to view their complete payment history.<\/p><\/dd>\n<dt id=\"how%20do%20i%20create%20custom%20membership%20roles%3F\"><h3>How do I create custom membership roles?<\/h3><\/dt>\n<dd><p>Go to Members &gt; Roles and add your custom roles. Set a priority level (0-99). Roles with priority &lt; 30 are automatically marked as \"Board Members\".<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20wordpress%20multisite%3F\"><h3>Does this work with WordPress Multisite?<\/h3><\/dt>\n<dd><p>Yes! The plugin is fully compatible with WordPress Multisite installations. You can choose between two management modes in Settings:\n- <strong>Global Mode<\/strong>: All sites share the same members across the network\n- <strong>Per-Site Mode<\/strong>: Each site manages its own members independently<\/p><\/dd>\n<dt id=\"can%20i%20export%20member%20data%3F\"><h3>Can I export member data?<\/h3><\/dt>\n<dd><p>Yes! Use the \"Export to CSV\" button on the Members List or Subscriptions List pages. You can filter the export by role, subscription status, or search term.<\/p><\/dd>\n<dt id=\"how%20are%20expiring%20subscriptions%20highlighted%3F\"><h3>How are expiring subscriptions highlighted?<\/h3><\/dt>\n<dd><p>Subscriptions expiring within 30 days are automatically highlighted with a warning color and show the number of days remaining.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translatable%3F\"><h3>Is the plugin translatable?<\/h3><\/dt>\n<dd><p>Interface strings are wrapped in WordPress translation functions under the <code>effortless-association-member-manager<\/code> text domain. French (fr_FR) and Spanish (es_ES) catalogues are included in the <code>languages\/<\/code> folder, along with the <code>.pot<\/code> template for starting a new language.<\/p>\n\n<p>Note on how WordPress loads them: translations published through translate.wordpress.org are installed into WordPress's own languages directory (<code>wp-content\/languages\/plugins\/<\/code>) and are applied automatically. The catalogues bundled in the plugin folder are provided as a starting point for translators and for manual installation \u2014 copy the <code>.mo<\/code> file for your locale into <code>wp-content\/languages\/plugins\/<\/code> if you want to use it directly.<\/p><\/dd>\n<dt id=\"can%20members%20upload%20profile%20photos%3F\"><h3>Can members upload profile photos?<\/h3><\/dt>\n<dd><p>Yes! When adding or editing a member, you can upload profile photos using the WordPress Media Library.<\/p><\/dd>\n<dt id=\"what%20date%20format%20does%20the%20plugin%20use%3F\"><h3>What date format does the plugin use?<\/h3><\/dt>\n<dd><p>The plugin respects your WordPress date format settings (Settings &gt; General &gt; Date Format).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.12.93 - 2026-08-22<\/h4>\n\n<ul>\n<li>Fix: the JSON export\/import file and the profile photo upload validated the file's name and temporary path without confirming they came from the current request's own file upload. Both now use <code>is_uploaded_file()<\/code> before reading the file and <code>sanitize_file_name()<\/code> before the name is used anywhere, including in log entries.<\/li>\n<li>Fix: the \"members can edit their own profile\" setting sanitized its stored value with a raw boolean cast, which treats the string \"false\" as true; it now uses <code>rest_sanitize_boolean()<\/code>.<\/li>\n<li>Fix: the email-attachment upload loaded two admin files it never used (<code>media.php<\/code>, <code>image.php<\/code>) alongside the one it does (<code>file.php<\/code>).<\/li>\n<li>Change: the donate notice's outbound link no longer includes the site address as a query parameter. It still identifies the plugin and version so support requests can be matched to a release, but not which installation was viewing it.<\/li>\n<\/ul>\n\n<h4>2.12.92 - 2026-08-13<\/h4>\n\n<ul>\n<li>Change: recording a subscription no longer emails the member automatically. The Add Subscription form has a new \"Send notification email to the member\" box, off by default \u2014 tick it when the member should be told. Quick subscribe, the one-click button in the members list, now records the payment silently; use the Add Subscription form when you want the email. Renewal reminders for expiring and expired memberships are unaffected and still go out on schedule.<\/li>\n<\/ul>\n\n<h4>2.12.91 - 2026-08-12<\/h4>\n\n<ul>\n<li>Change: \"Send welcome email to new members\" on the CSV import screen is now off by default. An import can create hundreds of members at once and sent email cannot be recalled, so notifying everyone is now something you opt into rather than something you have to remember to switch off. Tick the box to send as before.<\/li>\n<\/ul>\n\n<h4>2.12.90 - 2026-08-12<\/h4>\n\n<ul>\n<li>Fix: a site left with no membership roles now gets the three defaults (Member, Board Member, Guest) back automatically. They were only ever created when the plugin was activated, and WordPress does not re-run activation when a plugin is updated, so a site that reached an empty list stayed that way \u2014 leaving every role dropdown blank. Roles you renamed or deleted yourself are untouched; the defaults are only restored when the list is completely empty.<\/li>\n<li>New: the three default role names are translated for display, so they read Membre \/ Membre du bureau \/ Invit\u00e9 in French and Miembro \/ Miembro de la junta \/ Invitado in Spanish. The stored value stays in English, so switching the site language re-labels them and role names remain stable for imports and exports.<\/li>\n<li>Fix: CSV import now recognises a role given either by its stored name or by its translation, so a file prepared on a site running in another language imports correctly.<\/li>\n<\/ul>\n\n<h4>2.12.89 - 2026-08-12<\/h4>\n\n<ul>\n<li>Fix: \"Estimated Recipients\" on the Send Email page stayed blank instead of showing the number of members. The page's script was never loaded, because the plugin recognised its own admin screens by a fixed name that WordPress builds from the (translated) menu title \u2014 so it matched no site at all, and no site running in another language could ever have matched. The same fault was silently skipping the styles and scripts of the Settings, Add Member, Roles, Trash and Email Queue screens, which now load as intended.<\/li>\n<\/ul>\n\n<h4>2.12.88 - 2026-08-12<\/h4>\n\n<ul>\n<li>Fix: member profile links returned a 404 on sites where WordPress is installed in its own subdirectory. The links were built from the address of the WordPress files rather than the address of the site, so they pointed outside the area the \/member\/ route serves. Affects the trombinoscope, the admin Members and Subscriptions lists, the <code>{profile_url}<\/code> email placeholder, and the redirect after saving a profile.<\/li>\n<\/ul>\n\n<h4>2.12.87 - 2026-08-12<\/h4>\n\n<ul>\n<li>Fix: the \"Personal Options\" and \"Application Passwords\" sections of the profile screen are now found by their position in the page rather than by reading their heading text, so no translated string is involved and the sections are hidden correctly in every language.<\/li>\n<\/ul>\n\n<h4>2.12.85 - 2026-08-12<\/h4>\n\n<ul>\n<li>Fix: the \"Personal Options\" and \"Application Passwords\" sections of the profile screen are hidden correctly in every language. They are hidden by matching WordPress's own section headings, and the plugin previously compared them against its own translations of those headings \u2014 which only matched in English, French and Spanish, and left the sections visible in any other locale. The headings now come from WordPress's own translations, so the match cannot drift.<\/li>\n<\/ul>\n\n<p>Older changelog entries have been removed to keep this section within WordPress.org's length limits.<\/p>","raw_excerpt":"Manage association members as WordPress users, with membership roles, subscription dates, payment history, and CSV export.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/353400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=353400"}],"author":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/domclic"}],"wp:attachment":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=353400"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=353400"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=353400"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=353400"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=353400"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=353400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}