{"id":239052,"date":"2025-07-31T07:37:36","date_gmt":"2025-07-31T07:37:36","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/eventadmin-helfer-volunteer-management\/"},"modified":"2026-09-03T12:10:51","modified_gmt":"2026-09-03T12:10:51","slug":"eventadmin-volunteer-management","status":"publish","type":"plugin","link":"https:\/\/en-gb.wordpress.org\/plugins\/eventadmin-volunteer-management\/","author":23315332,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1.1","stable_tag":"2.1.1","tested":"7.1","requires":"5.8","requires_php":"8.0","requires_plugins":null,"header_name":"EventAdmin \u2013 Volunteer Management","header_author":"David Wiedmer, sidefyn GmbH","header_description":"Manage volunteers for events directly in WordPress. Create and schedule shifts, allow volunteers to sign up and cancel independently, and configure individual rules \u2013 e.g., maximum shifts per person per year.","assets_banners_color":"a2c2e1","last_updated":"2026-09-03 12:10:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/davesidefyn\/","rating":5,"author_block_rating":0,"active_installs":20,"downloads":2745,"num_ratings":4,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.5":{"tag":"0.5","author":"davesidefyn","date":"2025-07-31 10:21:54","revision":3337177},"0.6":{"tag":"0.6","author":"davesidefyn","date":"2025-11-14 09:21:02","revision":3395625},"0.7":{"tag":"0.7","author":"davesidefyn","date":"2025-11-16 13:46:28","revision":3396610},"0.7.1":{"tag":"0.7.1","author":"davesidefyn","date":"2025-12-01 16:22:04","revision":3407040},"0.7.2":{"tag":"0.7.2","author":"davesidefyn","date":"2025-12-01 20:43:25","revision":3407209},"0.8.0":{"tag":"0.8.0","author":"davesidefyn","date":"2026-03-15 19:19:17","revision":3483260},"0.9.0":{"tag":"0.9.0","author":"davesidefyn","date":"2026-03-15 20:06:47","revision":3483279},"0.9.1":{"tag":"0.9.1","author":"davesidefyn","date":"2026-03-15 20:56:03","revision":3483293},"0.9.2":{"tag":"0.9.2","author":"davesidefyn","date":"2026-03-15 21:25:44","revision":3483310},"0.9.3":{"tag":"0.9.3","author":"davesidefyn","date":"2026-03-15 21:32:08","revision":3483316},"0.9.4":{"tag":"0.9.4","author":"davesidefyn","date":"2026-03-16 09:43:22","revision":3483651},"0.9.5":{"tag":"0.9.5","author":"davesidefyn","date":"2026-03-16 10:00:06","revision":3483670},"0.9.6":{"tag":"0.9.6","author":"davesidefyn","date":"2026-03-17 08:43:14","revision":3484567},"0.9.7":{"tag":"0.9.7","author":"davesidefyn","date":"2026-03-17 09:43:17","revision":3484617},"0.9.8":{"tag":"0.9.8","author":"davesidefyn","date":"2026-03-17 09:43:17","revision":3484617},"0.9.9":{"tag":"0.9.9","author":"davesidefyn","date":"2026-04-11 16:08:26","revision":3504060},"1.0.0":{"tag":"1.0.0","author":"davesidefyn","date":"2026-03-17 11:51:39","revision":3484730},"1.0.1":{"tag":"1.0.1","author":"davesidefyn","date":"2026-03-17 12:14:22","revision":3484748},"1.1.0":{"tag":"1.1.0","author":"davesidefyn","date":"2026-03-17 21:58:15","revision":3485135},"1.10.0":{"tag":"1.10.0","author":"davesidefyn","date":"2026-08-21 13:39:49","revision":3659120},"1.2.0":{"tag":"1.2.0","author":"davesidefyn","date":"2026-03-18 08:33:00","revision":3485398},"1.3.0":{"tag":"1.3.0","author":"davesidefyn","date":"2026-03-19 06:19:41","revision":3486158},"1.4.0":{"tag":"1.4.0","author":"davesidefyn","date":"2026-03-26 21:51:12","revision":3492181},"1.4.1":{"tag":"1.4.1","author":"davesidefyn","date":"2026-04-07 21:18:12","revision":3501094},"1.4.2":{"tag":"1.4.2","author":"davesidefyn","date":"2026-04-10 07:35:36","revision":3503064},"1.5.0":{"tag":"1.5.0","author":"davesidefyn","date":"2026-04-11 16:08:26","revision":3504060},"1.5.1":{"tag":"1.5.1","author":"davesidefyn","date":"2026-04-12 17:50:10","revision":3504616},"1.6.0":{"tag":"1.6.0","author":"davesidefyn","date":"2026-06-03 15:43:32","revision":3559646},"1.7.0":{"tag":"1.7.0","author":"davesidefyn","date":"2026-07-01 11:19:40","revision":3592589},"1.7.1":{"tag":"1.7.1","author":"davesidefyn","date":"2026-07-02 10:01:33","revision":3593733},"1.8.0":{"tag":"1.8.0","author":"davesidefyn","date":"2026-08-03 19:25:47","revision":3633394},"1.8.1":{"tag":"1.8.1","author":"davesidefyn","date":"2026-08-13 19:23:21","revision":3646074},"1.9.0":{"tag":"1.9.0","author":"davesidefyn","date":"2026-08-21 10:19:08","revision":3658786},"2.0.0":{"tag":"2.0.0","author":"davesidefyn","date":"2026-08-21 21:46:50","revision":3659677},"2.0.1":{"tag":"2.0.1","author":"davesidefyn","date":"2026-08-21 21:55:50","revision":3659684},"2.1.0":{"tag":"2.1.0","author":"davesidefyn","date":"2026-09-03 11:25:18","revision":3679624},"2.1.1":{"tag":"2.1.1","author":"davesidefyn","date":"2026-09-03 12:10:51","revision":3679699}},"upgrade_notice":{"2.1.1":"<p>Maintenance only \u2014 refreshed screenshots and description. Nothing to do.<\/p>","2.1.0":"<p>Adds the [eventadmin_open_positions] shortcode for a public &quot;where we still need volunteers&quot; list. No breaking changes.<\/p>","2.0.1":"<p>Housekeeping release \u2014 corrects the in-plugin &quot;What&#039;s new&quot; notice. Safe to update.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":4},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3559646,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3559646,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3559646,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3559646,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.5","0.6","0.7","0.7.1","0.7.2","0.8.0","0.9.0","0.9.1","0.9.2","0.9.3","0.9.4","0.9.5","0.9.6","0.9.7","0.9.8","0.9.9","1.0.0","1.0.1","1.1.0","1.10.0","1.2.0","1.3.0","1.4.0","1.4.1","1.4.2","1.5.0","1.5.1","1.6.0","1.7.0","1.7.1","1.8.0","1.8.1","1.9.0","2.0.0","2.0.1","2.1.0","2.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3679699,"resolution":"1","location":"assets","locale":"","width":1800,"height":709},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3679699,"resolution":"2","location":"assets","locale":"","width":700,"height":1390},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3679699,"resolution":"3","location":"assets","locale":"","width":1800,"height":859},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3679699,"resolution":"4","location":"assets","locale":"","width":1800,"height":867},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3679699,"resolution":"5","location":"assets","locale":"","width":1800,"height":1108}},"screenshots":{"1":"Admin dashboard \u2014 live staffing overview: registrations, upcoming shifts, filled vs. open spots, and load per department","2":"The volunteer view \u2014 browse open shifts by department and sign up in one click","3":"Timeline view \u2014 every shift across the event on one chart; drag a shift to reschedule it","4":"Settings \u2014 shift limits per day\/week\/month\/year, overlap prevention, cancellation deadline, and spam protection","5":"Send Announcement \u2014 target a recipient group and see a live preview of the email"}},"plugin_section":[],"plugin_tags":[4747,11419,279011,19139,65258],"plugin_category":[40],"plugin_contributors":[245646],"plugin_business_model":[],"class_list":["post-239052","plugin","type-plugin","status-publish","hentry","plugin_tags-event-management","plugin_tags-roster","plugin_tags-shift-scheduling","plugin_tags-volunteer","plugin_tags-volunteers","plugin_category-calendar-and-events","plugin_contributors-davesidefyn","plugin_committers-davesidefyn"],"banners":{"banner":"https:\/\/ps.w.org\/eventadmin-volunteer-management\/assets\/banner-772x250.png?rev=3559646","banner_2x":"https:\/\/ps.w.org\/eventadmin-volunteer-management\/assets\/banner-1544x500.png?rev=3559646","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/eventadmin-volunteer-management\/assets\/icon-128x128.png?rev=3559646","icon_2x":"https:\/\/ps.w.org\/eventadmin-volunteer-management\/assets\/icon-256x256.png?rev=3559646","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/eventadmin-volunteer-management\/assets\/screenshot-1.png?rev=3679699","caption":"Admin dashboard \u2014 live staffing overview: registrations, upcoming shifts, filled vs. open spots, and load per department"},{"src":"https:\/\/ps.w.org\/eventadmin-volunteer-management\/assets\/screenshot-2.png?rev=3679699","caption":"The volunteer view \u2014 browse open shifts by department and sign up in one click"},{"src":"https:\/\/ps.w.org\/eventadmin-volunteer-management\/assets\/screenshot-3.png?rev=3679699","caption":"Timeline view \u2014 every shift across the event on one chart; drag a shift to reschedule it"},{"src":"https:\/\/ps.w.org\/eventadmin-volunteer-management\/assets\/screenshot-4.png?rev=3679699","caption":"Settings \u2014 shift limits per day\/week\/month\/year, overlap prevention, cancellation deadline, and spam protection"},{"src":"https:\/\/ps.w.org\/eventadmin-volunteer-management\/assets\/screenshot-5.png?rev=3679699","caption":"Send Announcement \u2014 target a recipient group and see a live preview of the email"}],"raw_content":"<!--section=description-->\n<p>EventAdmin turns a WordPress page into a self-service volunteer roster for an event. You create the shifts; volunteers register and sign themselves up; you keep the overview.<\/p>\n\n<p><strong>How it works:<\/strong><\/p>\n\n<ul>\n<li><strong>Set up shifts.<\/strong> Each shift has a time slot, a department, and a minimum\/maximum number of volunteers. Departments can be nested and colour-coded.<\/li>\n<li><strong>One page for volunteers.<\/strong> Put the <code>[eventadmin]<\/code> shortcode on a page. Visitors who are not logged in see a short registration form. Once registered, the same page becomes their dashboard: open shifts to join, the shifts they have taken, and their profile.<\/li>\n<li><strong>Volunteers manage themselves.<\/strong> They sign up and cancel on their own, up to an optional deadline. Limits you set \u2014 shifts per day, week, month or year, and optional overlap prevention \u2014 are enforced automatically.<\/li>\n<li><strong>You stay in control.<\/strong> The admin overview shows who signed up and which shifts are understaffed, as a Dashboard, Cards, a Table, or a drag-to-reschedule Timeline. Assign or create volunteers by hand, export CSV, and send bulk emails to chase the gaps.<\/li>\n<li><strong>Recruit in public.<\/strong> An optional <code>[eventadmin_open_positions]<\/code> list shows visitors where help is still needed before they register \u2014 no login required.<\/li>\n<\/ul>\n\n<p>Built for clubs, street festivals, and community events. Everything runs in your own WordPress install \u2014 no page builder and no external service required. Emails are sent through WordPress; social login works via the free Nextend Social Login plugin.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Create shifts with a time period, a department, and a minimum\/maximum number of volunteers<\/li>\n<li>Nested, colour-coded departments; a department (and its shifts) can be hidden from volunteers<\/li>\n<li>Public frontend on one page: volunteers register, sign up for shifts, and manage their profile<\/li>\n<li>Volunteers sign up and cancel themselves, with an optional cancellation deadline<\/li>\n<li>Configurable limits: maximum shifts per day, week, month, or year, plus optional overlap prevention<\/li>\n<li>Optional \"Full shifts\" section so volunteers can still see fully booked shifts (disabled by default)<\/li>\n<li>Public \"open positions\" overview (<code>[eventadmin_open_positions]<\/code>) \u2014 a no-login list of where volunteers are still needed, grouped by department, for a recruitment page<\/li>\n<li>Manual creation and assignment of volunteers by admins \u2014 pick an existing volunteer from a dropdown or create a new account on the fly, including offline volunteers without an email address<\/li>\n<li>Per-shift organizer \u2014 override the notification sender for a single shift with a linked WordPress user and\/or a manual name and email<\/li>\n<li>Assignment, cancellation, and reminder emails (reminders a configurable number of days before a shift)<\/li>\n<li>Registration form protected by a honeypot plus optional CAPTCHA (Google reCAPTCHA v2\/v3, hCaptcha, or Cloudflare Turnstile); blocked attempts are logged<\/li>\n<li>CSV export per shift or for all shifts<\/li>\n<li>Admin overview with Dashboard, Cards, Table, and Timeline views \u2014 drag shifts on the Timeline to reschedule them<\/li>\n<li>Dashboard statistics: registered volunteers, upcoming shifts, and open spots split into required (below the minimum) vs. optional openings<\/li>\n<li>Bulk email tool: announcements to all, opted-in, department-, shift-, or upcoming-shift-based recipient groups \u2014 batched, with a progress bar, delivery-failure tracking, a live HTML preview, an optional PDF attachment, and a confirmation email to the sender<\/li>\n<li>Customisable email design: rich-text templates, header colour, header title\/subtitle, footer, and custom CSS<\/li>\n<li>Volunteers can opt out of announcements on their profile page<\/li>\n<li>Send history log with subject, message preview, recipient count, and failure count<\/li>\n<li>Integration with Nextend Social Login<\/li>\n<li>Fully translatable; ships with German (informal &amp; formal), French, and Dutch translations<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>The plugin does not send your data anywhere on its own. Two optional features rely on third-party services, and only when you switch them on:<\/p>\n\n<ul>\n<li><strong>Spam protection on the registration form.<\/strong> If you enable a CAPTCHA under Settings \u2192 General \u2192 Security, the chosen provider's script is loaded on the registration page and the visitor's CAPTCHA response and IP address are sent to that provider for verification:\n\n<ul>\n<li>Google reCAPTCHA \u2014 <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a>, <a href=\"https:\/\/policies.google.com\/terms\">Terms<\/a><\/li>\n<li>hCaptcha \u2014 <a href=\"https:\/\/www.hcaptcha.com\/privacy\">Privacy Policy<\/a>, <a href=\"https:\/\/www.hcaptcha.com\/terms\">Terms<\/a><\/li>\n<li>Cloudflare Turnstile \u2014 <a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">Privacy Policy<\/a>, <a href=\"https:\/\/www.cloudflare.com\/website-terms\/\">Terms<\/a><\/li>\n<\/ul><\/li>\n<li><strong>Social login.<\/strong> If the separate Nextend Social Login plugin is installed and configured, volunteers can sign in through the provider you set up there (e.g. Google, Facebook). That exchange is handled by Nextend Social Login and the provider, under their terms.<\/li>\n<\/ul>\n\n<p>With none of these enabled, the plugin makes no external requests.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>EventAdmin stores volunteer data in your own WordPress database: name, email address, and phone number on the user account, plus which shifts each person signed up for. Passwordless login uses a short-lived token in user meta. When CAPTCHA spam protection is enabled, blocked or suspicious registration attempts are logged with a timestamp, the submitted email, and the IP address.<\/p>\n\n<p>The plugin does not yet integrate with WordPress's personal-data export and erase tools, and it does not remove its data on uninstall (see the FAQ). To delete a volunteer's data, delete their WordPress user \u2014 their shift assignments are removed automatically.<\/p>\n\n<h3>License<\/h3>\n\n<p>This plugin is free software under the GPLv3 or later.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the plugin via the WordPress backend or upload the ZIP file<\/li>\n<li>Activate the plugin<\/li>\n<li>Go to Pages \u2192 Add New and insert the <code>[eventadmin]<\/code> shortcode \u2014 this is the main volunteer page (registration for new visitors, shift selector + profile for logged-in volunteers)<\/li>\n<li>Create your departments under Shifts \u2192 Categories (optionally give each a colour)<\/li>\n<li>Create your first shifts under Shifts \u2192 Add New<\/li>\n<li>Optional: create separate pages for <code>[eventadmin_profile]<\/code> or <code>[eventadmin_shiftselector]<\/code> if you want dedicated pages for those features<\/li>\n<li>Optional: add <code>[eventadmin_open_positions]<\/code> to a public recruitment page to show non-registered visitors where volunteers are still needed<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20volunteers%20need%20an%20account%3F\"><h3>Do volunteers need an account?<\/h3><\/dt>\n<dd><p>Yes \u2014 they need to be logged in to join or cancel a shift, but there is no password to remember. On the registration form they enter their name, email, and phone; they then get a magic login link by email that signs them in. Admins can also create accounts manually, including \"offline\" volunteers with no email address (added by hand, no login).<\/p><\/dd>\n<dt id=\"which%20pages%20do%20i%20need%20to%20create%3F\"><h3>Which pages do I need to create?<\/h3><\/dt>\n<dd><p>Just one: a page with the <code>[eventadmin]<\/code> shortcode. It shows the registration form to logged-out visitors and the full dashboard (open shifts, my shifts, profile) to logged-in volunteers. <code>[eventadmin_open_positions]<\/code>, <code>[eventadmin_shiftselector]<\/code>, and <code>[eventadmin_profile]<\/code> are optional extras for dedicated pages.<\/p><\/dd>\n<dt id=\"how%20can%20i%20assign%20volunteers%20manually%3F\"><h3>How can I assign volunteers manually?<\/h3><\/dt>\n<dd><p>Open Shifts \u2192 Overview. In the Table view use the \"Add volunteer\" button on a shift, or click an open slot in the Timeline view. You can pick an existing volunteer or create a new account (with or without an email address) on the spot.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20shifts%20are%20full%3F\"><h3>What happens when shifts are full?<\/h3><\/dt>\n<dd><p>By default, full shifts disappear from the volunteer page. You can optionally enable a \"Full shifts\" section under Settings \u2192 Display so volunteers still see them, read-only with a disabled button.<\/p><\/dd>\n<dt id=\"what%20is%20the%20minimum%20volunteers%20field%20for%3F\"><h3>What is the minimum volunteers field for?<\/h3><\/dt>\n<dd><p>It marks how many volunteers a shift really needs. The dashboard flags shifts below the minimum and splits their open spots into \"required\" (up to the minimum) and \"optional\" (up to the maximum). It is informational \u2014 nothing is blocked based on the minimum.<\/p><\/dd>\n<dt id=\"can%20i%20set%20how%20many%20shifts%20one%20person%20may%20take%3F\"><h3>Can I set how many shifts one person may take?<\/h3><\/dt>\n<dd><p>Yes. Under Settings \u2192 General you can cap the number of shifts per volunteer per day, week, month, and year (0 = no limit), and optionally forbid overlapping shifts. These rules are enforced when a volunteer tries to sign up.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translated%3F\"><h3>Is the plugin translated?<\/h3><\/dt>\n<dd><p>It ships with German (informal and formal), Swiss German, Austrian German, French (FR and BE), and Dutch (informal and formal). All strings are translatable, and the bundled translations take priority over community language packs.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20deactivate%20or%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I deactivate or uninstall the plugin?<\/h3><\/dt>\n<dd><p>Deactivating only stops the scheduled reminder and cleanup jobs. Uninstalling does <strong>not<\/strong> delete anything \u2014 volunteer accounts, shifts, settings, and the \"Volunteer\" role stay in the database, so nothing is lost if you reinstall. Remove them by hand (or with a cleanup plugin) if you want a clean slate.<\/p><\/dd>\n<dt id=\"can%20visitors%20see%20where%20help%20is%20needed%20before%20registering%3F\"><h3>Can visitors see where help is needed before registering?<\/h3><\/dt>\n<dd><p>Yes. Put the <code>[eventadmin_open_positions]<\/code> shortcode on any public page (for example a \"become a helper\" page). It lists each department that still has unfilled slots in upcoming shifts, with the number of open spots, and needs no login. By default it shows a compact summary (one line per department); add <code>style=\"list\"<\/code> for the full list of individual open shifts. Further attributes: <code>category=\"slug,slug\"<\/code> limits it to certain departments, <code>show_intro=\"0\"<\/code> hides the intro line, <code>hide_past=\"0\"<\/code> includes shifts that already ended.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>Version 2.1.1<\/h4>\n\n<ul>\n<li>Maintenance: refreshed the screenshots and description on WordPress.org. No changes to the plugin itself.<\/li>\n<\/ul>\n\n<h4>Version 2.1.0<\/h4>\n\n<ul>\n<li>New: <code>[eventadmin_open_positions]<\/code> shortcode \u2014 a public, no-login overview of where volunteers are still needed, grouped by department, for a recruitment page. Two styles: a compact per-department summary (default) or a full list of individual open shifts (<code>style=\"list\"<\/code>), plus <code>category<\/code>, <code>show_intro<\/code>, <code>show_full<\/code>, and <code>hide_past<\/code> attributes<\/li>\n<li>Improvement: In-plugin Documentation page brought up to the 2.x feature set \u2014 new sections on departments, the Dashboard\/Cards\/Table\/Timeline overview, reminder &amp; notification emails, and e-mail design settings<\/li>\n<li>Improvement: Rewritten readme with a \"How it works\" overview, an expanded FAQ, and External services \/ Privacy sections<\/li>\n<li>Fix: Formal address (\"Sie\", \"u\") had leaked into several strings in the informal German and Dutch translations; the informal locales now use the informal register throughout<\/li>\n<\/ul>\n\n<h4>Version 2.0.1<\/h4>\n\n<ul>\n<li>Fix: The \"What's new\" admin notice still described the 1.8.0 Cloudflare Turnstile feature instead of what's new in 2.0.0<\/li>\n<\/ul>\n\n<h4>Version 2.0.0<\/h4>\n\n<ul>\n<li>New: Shift categories (departments) \u2014 hidden departments now show a badge and their color swatch in the department list, and Quick Edit gained color, hidden, parent, and description fields so all of this can be changed without opening the full edit screen<\/li>\n<li>New: Shift list (Shifts \u2192 All Shifts) can now be filtered and sorted by department, with the department shown as a colored badge<\/li>\n<li>New: Volunteers page reorganized \u2014 \"Create volunteer\" and \"Grant role\" now open as modals, blocked registration attempts and auto-deleted unverified accounts moved to their own tabs, filters apply instantly without a \"Filter\" button, and the whole toolbar (buttons, filters, search) fits on one row<\/li>\n<li>New: Shift overview reorganized into Dashboard, Cards, Table, and Timeline tabs (previously a single filtered view); each tab only shows the filters relevant to it<\/li>\n<li>New: Timeline view supports dragging a shift's bar to move or resize it directly on the chart, with an Undo option after saving and a matching \"Edit Shift\" modal for precise changes<\/li>\n<li>New: Dashboard statistics split each shift's open spots into \"required\" (below minimum) vs. \"optional\" (up to maximum)<\/li>\n<li>New: Send Announcement redesigned into a two-column layout with a real, live HTML preview of the email, and hovering the recipient count shows who will receive it and which shift(s) they're signed up for<\/li>\n<li>New: E-Mail design settings \u2014 pick a header color, set a header title\/subtitle shown together with the logo, format the e-mail footer with rich text, and (advanced) add custom CSS applied to every e-mail<\/li>\n<li>New: All e-mail texts in Settings \u2192 Communication (assignment, cancellation, reminder) now use the same rich-text editor as the footer, and the Communication tab is split into General \/ Shift Confirmations \/ Reminders sub-tabs<\/li>\n<li>New: Every modal in the plugin now closes via a small \"\u00d7\" in the top-right corner instead of a full-width button<\/li>\n<li>Fix: Shift categories marked \"Hide from volunteers\" lost their HTML badge styling in the department list and rendered as plain text<\/li>\n<li>Fix: Editing a shift's time via the Timeline (drag or Edit Shift modal) could shift the saved time by a couple of hours on sites where WordPress's timezone setting differs from the server's PHP default<\/li>\n<li>Removed: \"Empty shifts\" and \"Understaffed shifts\" dashboard counters (redundant with the required\/optional open-spot numbers)<\/li>\n<\/ul>\n\n<h4>Version 1.10.0<\/h4>\n\n<ul>\n<li>New: Send Announcement can now attach a PDF from the media library to every email in the batch<\/li>\n<li>New: {shifts} placeholder in Send Announcement lists each recipient's own upcoming shifts in the message body<\/li>\n<li>New: Shift overview has two additional views alongside Cards \u2014 a flat, exportable-looking Table view and a Timeline view showing a per-volunteer Gantt-style chart of shift start\/end times<\/li>\n<li>New: Timeline view shows open (unfilled) slots as red (below the shift's minimum) or grey (optional, up to maximum) bars, with a toggle to show or hide them, hour-aligned time axis, and the shift name drawn directly on each bar<\/li>\n<li>New: Click an open slot in the Timeline, or use the new \"Add volunteer\" button in the Table view, to assign a volunteer without leaving the page<\/li>\n<li>New: Table and Timeline views show each shift's capacity (assigned\/max, plus minimum when set)<\/li>\n<li>Fix: Shift-selection dropdowns (Send Announcement, Volunteers filter) were sorted as plain strings and could be scrambled by differing date formats between admin-entered and imported shifts; now sorted correctly and by shift name, then time<\/li>\n<li>Fix: Those same dropdowns showed a bogus end time (whatever time the page happened to load) instead of the shift's real end time, or none at all<\/li>\n<li>Fix: The \"Add volunteers manually\" dropdown sorted by a WordPress field this plugin never sets, unrelated to the names actually shown; now sorted by the same name<\/li>\n<li>Fix: Shift overview no longer paginates at 20 shifts per page \u2014 a full event's shift list now renders on one page<\/li>\n<li>Fix: A negative value (e.g. \"-1\") in the reminder-days setting was silently turned into a positive reminder day instead of being ignored; clarified that leaving the field empty disables reminder emails entirely<\/li>\n<\/ul>\n\n<h4>Version 1.9.0<\/h4>\n\n<ul>\n<li>New: Send Announcement now shows a live recipient count for a selected shift or category, not just for \"All\"\/\"Subscribed\"<\/li>\n<li>New: Two more Send Announcement recipient filters \u2014 volunteers without any upcoming shift, and volunteers with at least one upcoming shift<\/li>\n<li>New: Volunteers list now shows \"Registered\" and \"Last shift\" columns, both sortable<\/li>\n<\/ul>\n\n<h4>Version 1.8.1<\/h4>\n\n<ul>\n<li>Tested up to WordPress 7.1<\/li>\n<\/ul>\n\n<h4>Version 1.8.0<\/h4>\n\n<ul>\n<li>New: Cloudflare Turnstile added as a CAPTCHA provider option (Settings \u2192 General \u2192 Security) \u2014 reuses the site key and secret key already configured in the Simple Cloudflare Turnstile plugin, no separate keys needed<\/li>\n<\/ul>\n\n<h4>Version 1.7.1<\/h4>\n\n<ul>\n<li>New: \"Clear log\" button on the Volunteers page to clear the auto-deleted unverified accounts log<\/li>\n<li>Fix: Administrators who also held the Volunteer role could lose access to wp-admin menu items on sites using a non-default database table prefix or in multisite \u2014 the previous fix for this wrote to the wrong option name and never actually took effect on those sites<\/li>\n<li>Fix: Completed missing and corrected several inaccurate French and Dutch translations<\/li>\n<\/ul>\n\n<h4>Version 1.7.0<\/h4>\n\n<ul>\n<li>New: Selecting a parent department in the volunteer shift filter now also shows shifts tagged only with one of its child departments<\/li>\n<li>New: \"Hide from volunteers\" option on shift categories \u2014 hides the department from the frontend filter and labels; shifts are also hidden from volunteers when every department they're assigned to is hidden (shifts a volunteer is already signed up for are never hidden this way)<\/li>\n<li>New: Volunteer shift filter dropdown shows open\/total slot counts per department and indents child departments under their parent<\/li>\n<li>New: \"Category filter\" toggle under Settings \u2192 Display \u2192 Volunteer shift filters, to hide the department dropdown if it's not needed<\/li>\n<li>New: Tools \u2192 EventAdmin Data explains how to use WordPress's native Export\/Import to bring over a department &amp; shift setup from another site (volunteer sign-ups are excluded from the export)<\/li>\n<li>Fix: Registration form is now hidden after a successful or duplicate registration \u2014 only the confirmation message is shown<\/li>\n<li>Fix: Assigning\/unassigning a shift now updates the open-slots count live, without needing a page reload<\/li>\n<\/ul>\n\n<h4>Version 1.6.0<\/h4>\n\n<ul>\n<li>New: CAPTCHA support on the volunteer registration form \u2014 choose between Google reCAPTCHA v2, Google reCAPTCHA v3 (invisible), or hCaptcha via Settings \u2192 General \u2192 Security<\/li>\n<li>New: Honeypot bot detection on the registration form (always active, no configuration needed)<\/li>\n<li>New: Blocked registration attempts are logged with timestamp, email, IP, provider, and reason \u2014 visible in WP Admin \u2192 Volunteers<\/li>\n<li>New: State filter on the admin shift overview \u2014 filter by Empty, Understaffed, or Heavily understaffed<\/li>\n<li>Fix: Registration form handler now guards on the nonce field instead of the submit button, ensuring JavaScript-submitted forms (reCAPTCHA v3) are processed correctly<\/li>\n<li>Tested up to WordPress 7.0<\/li>\n<\/ul>\n\n<h4>Version 1.5.1<\/h4>\n\n<ul>\n<li>Fix: Department color picker circle turned black after adding the first department in the same session \u2014 it now correctly resets to the default grey after each addition<\/li>\n<li>Fix: Department colors were never saved due to a nonce action mismatch (created with one action name, verified with another)<\/li>\n<li>Fix: Volunteer names from deleted users showed as invisible entries in the shift selector \u2014 non-existent users are now silently skipped in the display name list<\/li>\n<li>New: Tools \u2192 EventAdmin Data now shows a count of orphaned shift assignments (assignments referencing deleted users) and allows cleaning them up with one click<\/li>\n<\/ul>\n\n<h4>Version 1.5.0<\/h4>\n\n<ul>\n<li>Fix: Shift assignment count shown in the frontend could be higher than in the admin when a WordPress user was deleted without being unassigned first \u2014 orphaned meta is now skipped by the count function<\/li>\n<li>Fix: Deleting a WordPress user now automatically removes their shift assignments, preventing orphaned data from inflating shift counts in future<\/li>\n<li>New: \"CSV export all shifts\" now includes shifts with no volunteers assigned \u2014 previously those shifts were silently omitted from the export<\/li>\n<\/ul>\n\n<h4>Version 1.4.2<\/h4>\n\n<ul>\n<li>Fix: Settings page now shows a confirmation notice after saving<\/li>\n<li>Fix: Email placeholders {start} and {end} showed empty in emails when the date\/time format setting had been wiped to an empty string<\/li>\n<li>Fix: {days} placeholder appeared literally in assign\/unassign emails \u2014 it is now available in all email template types, not just reminders<\/li>\n<li>Fix: Shift times displayed correctly in the frontend and admin even when the date format option is empty<\/li>\n<li>Fix: Plugin upgrade routine now restores missing or wiped settings to their defaults on version update, preventing silent data loss after updates<\/li>\n<\/ul>\n\n<h4>Version 1.4.1<\/h4>\n\n<ul>\n<li>Fix: Settings were not saved correctly when using the tabbed settings page \u2014 each tab's options are now registered in their own settings group, preventing cross-tab data loss on save<\/li>\n<\/ul>\n\n<h4>Version 1.4.0<\/h4>\n\n<ul>\n<li>New: Reminder emails for assigned Volunteers X days before a shift starts, configurable under Settings \u2192 Communication<\/li>\n<li>New: Settings cleanup \u2014 single Settings menu entry with General, Display, and Communication tabs<\/li>\n<li>New: Organizer user link on shifts \u2014 use a linked staff-side WordPress user as the email sender fallback, while keeping organizer name\/email as manual overrides<\/li>\n<li>Improvement: Frontend shift buttons now switch with translated labels instead of hardcoded English text<\/li>\n<li>Improvement: Transactional emails use a shared HTML wrapper for a more professional appearance<\/li>\n<li>Improvement: Documentation now explains email template customization inline in the admin area<\/li>\n<li>Fix: German locale updates for new settings, reminders, organizer-user flow, and communication UI<\/li>\n<\/ul>\n\n<h4>Version 1.3.0<\/h4>\n\n<ul>\n<li>Fix: Confirmation emails now use the date\/time format configured in Settings \u2192 Display instead of a hardcoded format<\/li>\n<li>Fix: Email live preview in settings now reflects the configured date format in real time (AJAX-powered, locale-aware)<\/li>\n<li>New: \"Create new volunteer\" form on the Volunteers page \u2014 create online or offline volunteers directly without going via a shift<\/li>\n<li>New: Configurable volunteer shift filters \u2014 admin can enable a text search and\/or date picker on the shift selector (Settings \u2192 Display)<\/li>\n<\/ul>\n\n<h4>Version 1.2.0<\/h4>\n\n<ul>\n<li>New: Shift card layout \u2014 date\/time and category labels now in a stable flex row; multiple or long categories no longer displace the date<\/li>\n<li>New: Configurable date format for shift start and end time (Settings \u2192 Display)<\/li>\n<li>New: Custom CSS field in settings \u2014 integrators can store theme-specific overrides directly in the plugin without editing theme files<\/li>\n<li>Improvement: Date format fields show a live preview and a collapsible token cheat sheet for easier configuration<\/li>\n<\/ul>\n\n<h4>Version 1.1.0<\/h4>\n\n<ul>\n<li>New: Send Announcement page \u2014 send emails to all volunteers, opted-in volunteers, a specific shift, a specific category, or an individual volunteer<\/li>\n<li>New: Overridable From name and From email per announcement<\/li>\n<li>New: HTML formatting support in announcement emails with live preview (subject, body, sender)<\/li>\n<li>New: Send history log \u2014 collapsible table with filter and sortable columns; shows subject, recipients, sent\/failed counts, and full message body<\/li>\n<li>New: Volunteers page \u2014 filter by category, text search, and sortable columns<\/li>\n<li>New: \"Email\" button on volunteer rows links directly to Send Announcement with that volunteer pre-selected<\/li>\n<li>New: Offline volunteers (no email address) are clearly indicated in the Volunteers list<\/li>\n<li>New: Chart labels on the Overview page are now fully translated<\/li>\n<li>New: Send Announcement section added to the Documentation page<\/li>\n<li>Fix: Settings and Documentation menu items now always appear last in the Shifts submenu<\/li>\n<\/ul>\n\n<h4>Version 1.0.1<\/h4>\n\n<ul>\n<li>Fix: Settings and Documentation menu items now always appear last in the Shifts submenu<\/li>\n<li>Improvement: Removed duplicate bulk email form from Volunteers page \u2014 use Send Announcement for bulk emails; offline volunteers (no email address) are visually indicated in the table<\/li>\n<\/ul>\n\n<h4>Version 1.0.0<\/h4>\n\n<ul>\n<li>Fix: Social badge now correctly detects Nextend Social Login users via the wp_social_users table instead of wrong meta key<\/li>\n<\/ul>\n\n<h4>Version 0.9.9<\/h4>\n\n<ul>\n<li>Fix: Manually added volunteers (via admin form or role grant) are now protected from auto-deletion and shown with a green Manual badge<\/li>\n<li>New: Unverified volunteer accounts (registered but magic link never clicked) are auto-deleted daily after the link expires; deletion log visible on the Volunteers page<\/li>\n<li>New: Unverified, Social Login, and Manual badges shown per volunteer in the admin Volunteers list<\/li>\n<li>Fix: Admin users who also hold the volunteer role no longer lose access to the WordPress backend (explicit false caps removed from volunteer role definition)<\/li>\n<\/ul>\n\n<h4>Version 0.9.7<\/h4>\n\n<ul>\n<li>New: Admins can grant or remove the volunteer role from existing WordPress users directly on the Volunteers page \u2014 includes an upcoming-shift warning before removal<\/li>\n<li>Fix: Category filter dropdown no longer overlaps shift cards on themes with non-standard heading sizes (replaced fragile negative margin with a flex layout)<\/li>\n<\/ul>\n\n<h4>Version 0.9.5<\/h4>\n\n<ul>\n<li>Fix: Bundled translations now always take priority over language packs from translate.wordpress.org, preventing incomplete community translations from overriding the plugin's own strings<\/li>\n<\/ul>\n\n<h4>Version 0.9.4<\/h4>\n\n<ul>\n<li>New: Assign existing volunteers directly from a dropdown when adding manually to a shift<\/li>\n<li>New: Offline volunteers \u2014 add volunteers without an email address; a placeholder is created silently, no notifications sent<\/li>\n<li>New: Per-shift organizer name and email \u2014 overrides the global notification address for both admin and volunteer emails on that shift<\/li>\n<li>Fix: Duplicate assignment no longer possible when the same email is submitted twice (pre-check added)<\/li>\n<\/ul>\n\n<h4>Version 0.9.3<\/h4>\n\n<ul>\n<li>Fix: New strings from 0.9.2 (update notice, support section, plugin row links) now fully translated in all 8 bundled languages<\/li>\n<\/ul>\n\n<h4>Version 0.9.2<\/h4>\n\n<ul>\n<li>New: Donation and review links added to the plugin row in the Plugins list<\/li>\n<li>New: \"Support EventAdmin\" section added to the Documentation page<\/li>\n<li>New: Dismissible update notice shown to admins after plugin updates<\/li>\n<\/ul>\n\n<h4>Version 0.9.1<\/h4>\n\n<ul>\n<li>New: Translations added for German (de_DE, de_AT), Dutch (nl_NL, nl_NL_formal), French (fr_FR, fr_BE), and German Switzerland formal (de_CH)<\/li>\n<li>Fix: Several translation errors corrected in de_CH and de_DE_formal<\/li>\n<\/ul>\n\n<h4>Version 0.9.0<\/h4>\n\n<ul>\n<li>New: Admin overview defaults to upcoming shifts \u2014 add \"Show: Upcoming \/ Past \/ All\" filter to see past or all shifts<\/li>\n<li>New: Admin overview sortable by date or name, ascending or descending<\/li>\n<li>New: Admin overview stats now include empty shifts and understaffed shifts<\/li>\n<li>New: Bulk email tool \u2014 send custom announcements to all or opted-in volunteers, with real-time progress bar, batch processing (25 per request), failed delivery tracking, and a confirmation email to the sender<\/li>\n<li>New: Email send history log on the announcement page (subject, message preview, recipients, failures, sent by)<\/li>\n<li>New: Volunteers can opt out of announcements via their profile page (opted-in by default, existing users unaffected)<\/li>\n<\/ul>\n\n<h4>Version 0.8.0<\/h4>\n\n<ul>\n<li>Fix: Quick edit fields (start time, end time, max. volunteers) now pre-populate correctly when opening the quick edit row<\/li>\n<li>Fix: \"Period\" column in the shift list is now sortable by start date\/time<\/li>\n<li>New: Optional \"Full shifts\" section on the volunteer shift selector page (disabled by default, enable under Settings)<\/li>\n<li>New: Minimum volunteers field on shifts \u2013 admin dashboard shows an understaffed warning when the minimum has not been reached<\/li>\n<\/ul>\n\n<h4>Version 0.7.2<\/h4>\n\n<ul>\n<li>Bugfix release<\/li>\n<\/ul>\n\n<h4>Version 0.7.1<\/h4>\n\n<ul>\n<li>Tested up to WP 7.0<\/li>\n<li>1.6.0: CAPTCHA support, state filter, registration logging<\/li>\n<\/ul>\n\n<h4>Version 0.7<\/h4>\n\n<ul>\n<li>restrict access to shifts and departments for non-logged in users (and SEO)<\/li>\n<\/ul>\n\n<h4>Version 0.6<\/h4>\n\n<ul>\n<li>missing .pot file added to support translations<\/li>\n<\/ul>\n\n<h4>Version 0.5<\/h4>\n\n<ul>\n<li>Review Feedback 2.0<\/li>\n<\/ul>\n\n<h4>Version 0.4<\/h4>\n\n<ul>\n<li>i18n - Support Multilanguage<\/li>\n<\/ul>\n\n<h4>Version 0.3<\/h4>\n\n<ul>\n<li>Extension of admin interface<\/li>\n<\/ul>\n\n<h4>Version 0.2<\/h4>\n\n<ul>\n<li>Notification extensions<\/li>\n<\/ul>\n\n<h4>0.1<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Shift management, volunteer registration, dashboard, export, rules<\/li>\n<\/ul>","raw_excerpt":"A self-service volunteer roster for events: create shifts, let volunteers sign up themselves, set limits, export CSV, and track it on a dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/239052","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=239052"}],"author":[{"embeddable":true,"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/davesidefyn"}],"wp:attachment":[{"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=239052"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=239052"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=239052"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=239052"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=239052"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/en-gb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=239052"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}