Volunteer Sign Up Sheets documentation

The Volunteer Sign Up Sheets plugin is a free plugin that you can download from the WordPress.org repository. Search for it from your Add New plugins page, or download it from WordPress.org and install it manually.


Minor Name Change

I finally decided to remove the “PTA” from the display name of the plugin, and will slowly be removing all other instances of “PTA” from the extensions and documentation. I have not been asked to, but rather am doing this proactively to ensure it doesn’t become an issue in the future. Although the plugins were initially developed for my son’s grade school PTA web site, and I am still a member of the PTA, these plugins have never been officially sponsored or endorsed by the PTA, and I don’t feel right continuing to use their name in my plugins. When I originally developed these plugins, there were ONLY used on our school’s PTA web site, and, at the time, it made sense to name them this way. I did not think to change the name when releasing the plugins at the WordPress.org web site a couple years later. Note that this will only affect the display names and titles of the plugins. Directories, file names, HTML class names, action/filter hooks, shortcodes, and text domains (for translations), will not be changed as those are not shown to the public and it would break any custom code, translations, or CSS styling others have already done.

Newest Features

Version 4.0

  • New Admin Function – Move Signup. On the admin View Signups page for a sheet, in the actions column there is now a third icon (which WordPress dashicons says in the “schedule” icon) that will open up a page to move that signup to a different Sheet/Task/Date. Click on that icon, then select a sheet from the dropdown list (only sheets that aren’t expired will show, and only those that aren’t “No Signups” sheets). When you select a sheet, the Select Task dropdown select will show and be populated with all available tasks & dates for that sheet, with available meaning that there is at least as many open spots remaining as the quantity of the original signup. Once you select a task, a confirmation checkbox will appear that you must check to confirm you want to move the signup. NOTE! – This is a relatively simple function that ONLY changes the task ID and the date for the signup in the signups database table. If the Item Details, for example, doesn’t match between the original task and the one you move to, you’ll need to edit the signup to change the Item Details to make sense for the task you move the signup to. Similarly, if you are using Custom Fields and have created different signup templates to collect different information during signups, and the template for the task you move to doesn’t have the same set of fields, then you will again need to edit the signup after moving to fill in the correct information for those custom fields.
  • New DataTables Feature – Save State. On the admin side, for the View Signups and the View/Export All Data tables, which use the DataTables plugin to view/filter/sort and export data, the Save State function has now been enabled via two new buttons. The “Create State” button will save the current state/view of the table into a new preset (there is no confirmation when you do this). The “Saved States” dropdown select button shows all the states you have saved for that particular table. Click the button then click on the State you wish to restore. You’ll also notice there is a dropdown arrow for each saved state that gives you further functions for that state: Update, Rename, and Remove.
  • Two new checkboxes were added to the Email Settings section. One to disable Signup Confirmation emails and the other to disable Reminder Emails. This allows you to disable just those emails for any reason, without having to use the Disable ALL Emails checkbox.
  • Translation Text Domain changed to fit what wordpress.org wants it to be so that you can now work on translations in your language at wordpress.org.
    Go to: https://translate.wordpress.org/projects/wp-plugins/pta-volunteer-sign-up-sheets/
    if you want to contribute to a translation in your language. Note there are old translation files in the /languages folder of my plugin that could make a good starting point. Most of them have not been updated in over a year, as they were all sent to me by people who took the time to create translations.

Version 3.6

  • New Admin functions – Reschedule/Copy, and Multi-Copy of Sheets. Reschedule allows you to change dates and times of sheet and tasks and associated signups. Copy (different than the simple copy) allows you to copy the sheet, tasks, and signups (optional) to new dates and times, without deleting the original sheet. Multi-Copy allows you to specify an interval in days (such as 7 days for a weekly event), and the number of copies you wish to make, and then it will make that many copies of the sheet with new dates at the specified interval, also copying tasks and optionally copying the signups as well.
  • New Reschedule Email Subject and Message template settings that will be used for the new Reschedule/Copy functions when you check the checkbox to send emails when using those functions. Since this could lead to a large number of emails for sheets with lots of tasks and signups, the signup IDs are saved in the database and the emails are sent out hourly during the same CRON job that sends out reminders. If you have a limit set for the max # of reminders to send out each hour, that limit is also used for Reschedule emails as well.

Version 3 is the first part of a major rewrite of the code, as this is one of my oldest plugins, which actually started its life as a plugin from another developer.The main focus of this rewrite was to not only organize the underlying code, but to also clean up the public side output to reduce the number of table columns as much as possible (to also allow more space for custom fields columns with the new Custom Fields extension). Separating the tasks view for a sheet into a separate table for each task allows unused columns for a task to be removed (such as item details and quantity), and also allows moving the date and times, and the new task descriptions, to the “header” area above the table, freeing up even more columns. Additionally, I added some much requested admin side functionality, such as editing and adding signups, and also got rid of the clunky old CSV export functions, and replaced with the much more advanced DataTables jQuery plugin for organizing the data and exporting or printing in 4 different ways (Excel, CSV, PDF, or Print).

  • Added an optional Task Description field for each task on a sheet
  • When viewing a sheet, each task is now split to its own table, or table-styled div layout, and only columns applicable to that task are shown. For example, if there are no Item Details or Quantities for a task, those columns will no longer be shown.
  • Task start and end times are now shown under the date in the “header” area of each task (above the table), and only if they are set for that task. They are no longer shown as columns in the signups list table. This gives more space per column on the screen for the shown columns, and allows more room for extensions that add additional columns to the signups list display.
  • Added a PTA Block (under widgets group) to create sign up sheet shortcodes using the Gutenberg block editor
  • Added new show_date_start and show_date_end arguments to the shortcode to allow to remove one or both of those columns from the main sheet list
  • Added the jQuery DataTables plugin for viewing signups in the Admin dashboard, and included functionality for export to CSV, Excel, PDF, or Print. Columns can be hidden/shown, rearranged, and data can be filtered and sorted however you like before you export or print. This now replaces the old “Export To CSV” button and function on the admin View Signups page.
  • Added the ability for Admin to Add/Edit Signups on the admin side View Signups page for a sheet.
  • Cleaned up and simplified the CSS for table-style div output mode
  • Moved the “Clear” column for individual sheets view to be after the Item Details and Item Quantity columns, so that it’s always at the end of each row
  • No longer show an empty clear column if not allowing clear for a sheet, or if within the minimum time allowed for clear.
  • Clear column will now ALWAYS be shown to admin and signup sheet manager users on public side for easy clearing of signups (if showing individual signups in a task list)
  • Added search box to Admin All Sheets page to search for sheets on the sheet title.
  • Added Visibility and Sheet Type filters to Admin All Sheet list page.
  • Code re-organizing and rewriting
  • Additional hooks to allow new extensions (such as the new Custom Fields extension)
  • Rename “timepicker” class for admin task time selector to avoid conflicts with other time pickers using the same class name with different timepicker scripts
  • Updated datepicker jquery plugin to latest version
  • Korean translation added, courtesy of Jeehyo Chung and Julia Choi

Feature Requests:

Have a new feature to request? Please add your feature requests to the feature request forum.I will use the feature request forum to try to keep track of the most popular feature requests, and will pick from those when (and if) I decide to add more features to the plugin.

Already this plugin has MANY more features than I originally intended, and MUCH more than we use for our school PTA site! It’s simply not possible or even practical for me to include all the feature requests that get sent my way. If I tried to make everyone happy and include every feature that people requested, the options would be overwhelming, and the plugin would be bloated to the point of greatly slowing sites down.

Whenever possible, if a feature request is popular enough, and won’t complicate or bloat the plugin too much, I will do my best to add it as I find time. Donations and great reviews are always encouraging!! Unfortunately, donations are extremely rare, and don’t come anywhere close to paying for the time involved to add just one small feature. Paying jobs always take priority.

If there is something you need right away, and it’s a feature that can be worked into an extension, or would be of benefit to many users, I will always consider subsidized development.

Other times I may decide to add features via a paid extension, so that they don’t over complicate and bloat the main plugin, and so they can help cover some of my development time. This way you can pick and choose only the extensions you need for the extra features you want. If you don’t see an extension that covers the features you need, I can always be hired to custom program one for you!

I also have been adding new features to the main plugin, as well as some of the extensions, as “subsidized” development jobs. If you have a feature that you absolutely need, and it’s something that I think may benefit other users as well, then I may consider moving it up to the top of my work list for a smaller subsidized fee for my development time. I usually do this more for paid extensions, and hope to make back my development time through additional sales.


Main Settings

  • Enable Test Mode — Pretty self-explanatory. Puts the entire system in test mode so that only admin level users can view sign-up sheets on the public side. All other users will see a message of your choosing
  • Test Mode Message — The message you want displayed to the public on the page with your sign-up-sheet shortcode while in test mode.
  • Volunteer Sign Up Page — Choose a page from the drop down select list where you have put the main volunteer short code. Links in the widget will go to this page, and this page needs to be set for those widget links to work correctly. However, you can now use the below option to bypass redirects to this page from sign-up links in task lists.
  • Redirect Sign Ups to Main Page? — When checked (default) and a volunteer clicks on a sign-up link from the task list, they will be redirected to the main volunteer page (set above) for the sign-up form. The above setting is required for the Widget links to work properly, but you can now un-check this setting if you are using different sign-up sheet shortcodes on different pages to display specific sheets and want to keep the volunteers on that particular page when they go to the sign-up form.
  • Use divs? — If you check this option, the sheets lists, individual sheet tasks lists, and volunteer sign-up lists (list of things the volunteer signed up for if they are logged in), will be output using divs styled as a table instead of using tables. This makes it easier to style the output the way you want using custom CSS, as well as the ability with custom CSS to make the lists more responsive and mobile friendly. Each div has an appropriate class name (or several classes), making it very easy to target specific parts of the list for custom styling (or to hide them completely).
  • Disable plugin CSS? — Check this option to completely disable the output of the plugin’s CSS stylesheet. This way you don’t have to use things like “!important” to override the built-in styles. Use your browser inspector to get the classes for elements you want to style, or copy the plugin’s style sheet (inside the assets/css folder, it is the style.css file) to your theme and modify as desired.
  • Disable User Signups List? — When checked, the list that shows the loggged in user’s signups will NOT be shown below the list of signup sheets. You can then use the separate shortcode for the user signups list to display that list anywhere you wish.
  • Hide Volunteer names from public? — When checked, it just shows a slot as “filled”. When not checked, it will show the first name and last initial of the person who signed up for that slot (no last names or contact info are ever shown to the public)
  • Show full name? — When checked, and not hiding name (above), the full first and last names will be shown instead of first name and last initial.
  • Consolidate remaining slots? — Condenses the layout of empty slots on task/item lists… very helpful if you have a lot of slots for a particular task/item and don’t want to show an empty row for each unfilled slot.
  • Hide Details and Quantities — This is a global option that affects all sheets. If you check this, the Details and Quantities columns will NOT be shown on any sheet (in case you are using the item details field to collect personal info you don’t want to show to anyone else)
  • Hide User Signups Details and Quantities — If checked the item details and quantity fields will be hidden from the list of User Signups, when a user is signed in.
  • Hide chair contact info from public? — Although chairs and contact info are required when creating a sheet, you can check this option to not show the chairs and contact info to the public on your sheets.
  • Show Ongoing events in Widget? — When checked, Ongoing event types will also be displayed in the sign-up sheets widget. Normally the widget will only show sheets with tasks that have dates that haven’t passed yet. Ongoing events don’t have dates, though, so if you include them in the widget they will always show up in the widget list of sheets.
  • Show Onging events last? — This works with the above option, and determines if ongoing events are shown first or last in the widget sheet list.
  • Phone Required? — Previously all sign-up form fields were required. Now with this option you can decide if the phone field is optional, without having to use the below option to completely remove it from the form. Default value is that phone is required.
  • Remove Phone field from Signup form? — If you don’t need volunteers to provide a contact form number, you can check this box to remove the field from the signup form.
  • Login Required? — If checked, only logged in users of your site will be able to view and sign up for any volunteer sheets.
  • Login Required for Signup? — If you un-check the above box, but then check this box, visitors can view the sheets, but they will not be able sign-up until they login. An often asked for feature!
  • Login Required Message — The message non-logged-in users will see on the volunteer sign-up sheets page if the above option is checked
  • Login to Sign-Up Message — This message replaced the “sign up” text link when you have the “Login Required for Signup?” option checked.
  • Read Only Signup? — When requiring users to be logged in to view or sign-up, when you check this option, the name and email fields will be filled from their user account info, and they won’t be able to modify it during the signup (input fields are set to read only).
  • Show Login Link? — If you have the login required option set, checking this will show a login link under the login required message.
  • Disable Login Notices? — Turns off the messages that strongly recommend they login before signing up (if they are not logged in and you are not requiring login).
  • Prevent Global Overlapping Signups? — Checking this will prevent users from signing up for tasks on the same date with overlapping times. As opposed to the per sheet option, this will check ALL user signups across ALL sheets and, when enabled, will always check for overlaps, regardless of the per sheet setting.
  • Show Task Description on Signup Form? — Check this to show the task description on the signup form, if you have entered any text in the task description field.
  • Enable CRON Notifications? — A CRON job is a scheduled action that happens in the background. This plugin sets up two CRON jobs that are checked hourly. One checks to see if any reminder emails need to be sent, and they other checks to see if there are any expired signups that should be cleared from the database. WordPress has its own CRON function, which we use, but it will only get triggered when there is traffic to your site, so it’s possible that the CRON jobs will not run every hour. If you check this box an email will be sent to your admin email address when a CRON job is run that has any results, meaning some reminders were sent or some signups were deleted from the database. If no reminders were sent or no signups were deleted, you will not get an email.
  • Detailed Reminder Notifications? — Admin reminder emails notification will include the message body of all reminders sent, useful for troubleshooting.
  • Skip Signups Check? — Skips the check that compares current task signup count against the task quantity entered on the Admin edit tasks page. This will allow you to change the quantity for a task to a number lower than the number already signed up (useful if you want to save old signups for a recurring task, but change the quantity for future occurrences). NOTE: This will also skip the check for existing signups when you remove a task from a sheet! If you remove the task, you will no longer be able to view any signups for that tasks (even though they are still in the signups table).
  • Show Expired Tasks? — If you want to save signup info even after the dates have expired, check this box. This ONLY affects the signup lists on the ADMIN side. The public sign up sheets will never show tasks/signups that have expired.
  • Automatically clear expired signups? — Enables the hourly CRON function that checks for and deletes expired signups from the database. If you want to save your signup data after a task date has passed be sure to uncheck this and then check the above option to be able to view the expired tasks/signups on the admin side. If later on you want to manually delete all your expired signups, use the button on the CRON Functions page. For example, it is useful to clear all signups so that you can alter the dates on a sheet and reuse it for the following school year.
  • Enable Sign-up form live search? — If you check this box, admin users can use the public side to sign-up other volunteers for tasks. Start typing in a first or last name on the sign-up form, and matching users/volunteers will show in a drop down list you can select to automatically fill the fields. When you submit the sign-up, that sign-up gets assigned to that user (if they have a user account on your site) instead of to your admin account.
  • Live Search Tables — Select which tables to search for the above live search field. You can select WordPress Users, or the Sign-Ups table, or both.
  • Disable Date/Time Translation? — This disables the WordPress date_i18n date/time translation function, instead uses the simple PHP date function to format dates and times. WordPress modified the way they do things in 5.3, and if any other plugin or theme is using the date_default_timezone_set function (WordPress specifically states that function should NOT be used any more), it could throw off the display times. This option will correct for that by using the simple PHP date function to format date and time displays. However, this will NOT allow translation, and so dates/times will be shown in the language locale set on your server.
  • Disable Grouping? – Check this to disable the row grouping feature of DataTables on the admin side View Signups and View All Data pages. Checking this will completely disable that feature and show all columns by default.
  • Show All Slots for All Data? – Check this to show each empty slot in its own row on the admin View/Export ALL Data page. Useful if you want to print a manual signup form for multiple sheets at once. NOTE that this will greatly slow down the load time and dataTables initialization time of that page.

Email Settings

  • FROM email — Enter the email address that you want set as the From address for signup confirmation and reminder emails. NOTE: if you use an SMTP plugin, this address may be overridden by your SMTP settings.
  • Reply-To email — The reply-to email address for the same emails
  • Reply-To Chairs? — Check this to have the reply-to emails be set from the chair emails. When checked, the above reply-to option is ignored.
  • Confirmation email subject — Subject line of the confirmation email a volunteer receives when they sign up for something. This email is also copied to the contact emails for that sheet.
  • Confirmation email template — Here is where you set up the confirmation email that a volunteer receives when they sign up for something. Curly brackets are used as placeholders for variables that you can embed into your email, and there is a list of the ones you can use below the text area. To avoid typos, just copy and paste the variable tags you want to use from the list below the textarea, including the curly brackets. These emails are sent as plain text, so do not use html.
  • Reminder email subject — subject for reminder emails sent to volunteers if you entered values for 1st or 2nd reminders when you added a sheet.
  • Reminder email template — works the same way as the Confirmation email template
  • Reminder 2 email subject — subject for the second reminder emails sent to volunteers if you entered values for 1st or 2nd reminders when you added a sheet. If this if left blank (default), then the same subject will be used for both reminders.
  • Reminder 2 email template — email template for the second reminder email. Leave this blank (default) to use the same template for both reminders. This is independent of the reminder 2 subject, so even if the reminder 2 subject is blank you can still create a separate message template, and vice versa.
  • Max Reminders per Hour — if your hosting account places a limit on the number of outgoing emails per hour, it’s a good idea to set a number here to limit how many emails this plugin can send out per hour. Make sure to give yourself some margin to allow for other system emails as well. Leave blank or set to zero for no limit.
  • Reschedule email subject — subject for the reschedule emails sent to volunteers if you check the box to send emails when using the Reschedule/Copy functions
  • Reschedule email template — works the same way as the other email templates, but used if you check the box to send emails when using the Reschedule/Copy functions
  • Separate CC/BCC to individual TO emails? — If checked, any CC or BCC email addresses (chairs, global CC, admin) will be sent individually as separate emails, as opposed to one email with several CC or BCC addresses in the header. This could solve some email issues on some servers when using the the built-in wp_mail function (PHP sendmail), instead of an SMTP email plugin (a better choice), where none or only some of the CC/BCC recipients actually get the email. Note, however, that this could send out a large number of emails at once, and you should be aware of any server limits on the number of emails sent per hour. Also, see this thread about WordPress emails.
  • Send emails when clear from admin? — Check this option to send out the cleared signup email when a spot is cleared by the admin from the admin view signups page.
  • Disable chair emails? — Check this to disable sending copies of all the signup, reminder, and cleared emails to the chair emails. If you have a lot of spots and lots of volunteers signing up, and regularly check the volunteers on your site, you may want to check this box if the chair email boxes are getting flooded with notifications.
  • Disable Confirmation emails? — Check this to disable sending signup confirmation emails when someone signs up. NOTE: This will also disable emails to the sheet chairs or admin since those are just BCC fields in the confirmation email and not separate emails
  • Disable Reminder emails? — Check this to disable the sending of ALL reminder emails.
  • Disable ALL emails? — If checked, ALL emails will be disabled (including reminder emails). Useful if you want to clear and manually sign up users without emails being sent (when making corrections, for example). Reminders will start to get checked and sent again after you turn this off.

Integration Settings

This page will show any options that are available for integrating with other supported plugins. Right now, this plugin only integrates with the PTA Member Directory & Contact Form plugin.

PTA Member Directory Integration settings

If you have the PTA Member Directory plugin, you can use it to specify a Position group of members to be the contacts for a volunteer sheet. For example, if you are having an Ice Cream Social and have the committee chairs for the ice cream social set up with the “position” of Ice Cream Social in your member directory, then you can specify that group as the contact for your Ice Cream Social volunteer sign-up sheet. If a volunteer clicks on the contact link on the Ice Cream Social volunteer page, they will be taken to the member directory contact form with that group pre-selected, and they can send a message to the group. Also, for the confirmation and reminder emails, the plugin will automatically extract the emails for all members of that group and list those emails in place of the {contact_emails} template tag.

  • Enable PTA Member Directory — Turns on the integration with the Member Directory plugin
  • Member Directory Page — Select the page where you have put the shortcode for your member directory.
  • Contact Form Page — Select the page where you have put the shortcode for the PTA Member Directory contact form. This page will be linked to from the contact link on the sign-up sheet pages, and the group you specify as the contact for the sheet will be pre-selected in the contact form. Also works with the Gravity Forms extension.

User Roles – Sign-up Sheet Manager

This plugin adds a new user role to the WordPress system called “Sign-up Sheet Manager”. This role is the same as the “Author” role, except that it adds the “manage_signup_sheets” capability. If you have users who you want to allow to create, edit, and view sign-up sheets on the admin side, but don’t want them to have full admin access, you can either assign them to the Sign-up Sheet Manager role, or use some type of role/capability editor (such as Role Scoper) to assign the manage_signup_sheets capability to them.


Event Types

When adding a new sign-up sheet, there are four Event Types you can choose from:

  • Single — This is for an event that happens on just one day. You will only be able to enter one date on the tasks screen that will apply to all items/tasks for this event type.
  • Recurring — This is for an event that recurs on multiple days, but has the exact same items/tasks needed for each occurrence. For example, our school has Popcorn Fridays almost every Friday, and we need two poppers and one cashier each Friday. On the tasks screen for this event type, there will be a multi-date select box to allow you to set all the dates for this event, and then all of the tasks you enter will show up for each one of those dates. NOTE, it is possible to eventually fill up all the space allocated to this dates field, so if you have an event that recurs a very large number of times, you may need to limit how many upcoming dates you list at one time and deselect old dates after they have passed. We came across this problem with our Popcorn Fridays event for our school, but after I figured out the problem, I more than doubled the available size for this field.
  • Multi-Day — This is an event that happens across more than one day, but that has different tasks/items needed for each day. For example, we use it for our Book Fairs, where we have a “set up” day and a “take down” day where we just need a certain number of bodies to help, and then for the week of the book fair we need a certain number of cashiers and book finders/floaters for each day. For these Multi-Day event types, each task/item has its own single date picker field to specify the date for that item/task.
  • Onging — This type of sheet doesn’t have any dates associated with it. These are for more general volunteer type opportunities that don’t have specific date/time type requirements, but are needed at various times throughout the year. For example, you could use it to get volunteers for Yearbook photographers, Webmasters, Art Docents, classroom helpers, etc.

Adding a new Sign-up Sheet

From the admin dashboard, you can create a new sign-up sheet with the “Add New” submenu page under Sign-Up sheets, or by clicking on the “Add New” button at the top of the “All Sheets” list.The forms for entering a new sign-up sheet are split across 2 pages, the first being for the main event type and details, and the second is where you set up all the items/tasks needed. Once a sheet has been saved, there will be an “Edit Sheet” and an “Edit Tasks” link for each sheet when you hover over the name.

Add/Edit Sheet

This is the page where you set up the Event Title, Type of Event, Contact Info, and the Event Details. You can only select the Event Type when adding a new sheet. Once that sheet has been saved, you can’t change its event type as the task data is saved differently for each type of event and would not translate properly to a different event type.

Most of the fields here should be self explanatory.

No Signup Event? Checking this box lets you create an event that doesn’t need anyone to sign up, but still lets you create simple tasks/items. This is so you can show other types of events, which don’t require volunteers, in the main sheet list, the widget, or the calendar extension.

Reminders: You can have up to two automatic email reminders sent out to volunteers. To set up a reminder, simply enter the number of days before the task/event date that you want the email sent. For example, you may want to send out the first set of reminders 7 days before an event/task, and the second set of reminders the day before. If you don’t want any reminders sent, just leave these fields blank or set them to 0. Note that the date that the reminder function checks against is the date for each task, so it works properly for recurring events or multi-day events. If you use an Ongoing even type, these fields won’t have any effect and reminders won’t be sent.

Show Clear links for signups? This is checked by default to be compatible with older versions. Un-checking this will remove the clear links from the public side, so that volunteers (if they were logged in when they signed up) can not clear their own sign-ups.

Clear links and # of days: Added in version 1.8, you can now decide if you want to allow volunteers to be able to clear themselves from an item/task they signed up for. Uncheck the box to completely disable the clear links for all signups on the sheet. If you leave it checked, you can also specify a # of days before the event after which they can no longer clear their signups. For example, if you set this to 2 for a task/item scheduled for a Friday, then they can only clear their signups before Wednesday. From Wednesday on the clear link will not be shown. Please note that this only works if your volunteers all have user accounts on your site and if they were logged into their account when they signed up, or, if they weren’t logged in, they used their registered email. They only see the list of items they have signed up for on the main sign-up sheet page if they are logged into their user account.

Allow Duplicate Signup Times? Allows volunteers to sign-up for different tasks (on the same sheet) that have overlapping times.

Contact Info: Contact info is required. If you don’t have the PTA Member Directory plugin and the integration enabled, then you must enter at least one name and email for the contact info. Multiple names and emails can be entered by separating each by a comma. If you do have the Member Directory plugin and integration is enabled, then you will see a select box with Positions from the Member Directory as choices. You may then select one of those Positions to act as the contact for the sheet/event. If the public clicks on the contact link on the sign-up sheet page for that event, they will be taken to the contact form with that position pre-selected as the recipient group. That contact message will be sent to all members who hold that position. Alternately, instead of selecting a position (in case you chose not to show positions in your contact form, for example, or you don’t want to use them as contacts), you can still enter names and emails in the boxes provide. NOTE, you are not allowed to do both — i.e., you can’t select a Position and also enter names/emails.

Program/Event Details: Although this field is optional, it is probably the best place to put all your detailed info about an event that you want to present on a sign-up page. This will then be generated by the shortcode when a volunteer clicks through to this specific sign-up page. This way you can just have one page for ALL of your volunteer events that you put the main shortcode on. That will show a list of all available volunteer opportunities, and when they click through to one of the sheets/events they can see full details as well as a listing of all the tasks that they can sign up for.

Add/Edit Tasks/Items

The page to add or edit tasks/items should also be mostly self-explanatory, but a few things will change depending on the type of event selected.For Single and Recurring event types, the first field on the page will be for date/dates. For Single events, you may select only one date with the pop-up date picker. For Recurring events, you can select many dates, but you MUST select at least 2 dates (otherwise, it’s really a single event). You can then add/remove and sort taks/items as needed.

The only required fields for Tasks/Items is a name and # of People/Items needed. If you don’t enter a number for # of People/Items needed, the plugin will assume you meant to enter a 1 and fill that in for you when you save the tasks. Other fields are optional.

For Multi-Day events, the main difference is that the date field at the top will be removed, and instead each Task/Item will have its own date field, for which you can pick only one date.

For Ongoing events, you will not see any date fields at all on the add/edit tasks page. Everything else functions the same as above.

Add/Edit Task Description – Added in version 3, you can click on this text link to add an optional description for each task. A small textarea input will open where you can add the description. You can use HTML within the description. This description will show above the table for the task on the public side, if it is not blank for that task.

Details Needed – Originally, this field was set up for our own organization for staff lunches where people would sign up to bring something like a “main dish”, and we wanted them to specify the exact dish they were bringing to avoid duplicates by other volunteers. However, users of this plugin have found many other uses for this field, and options have been added to make it more flexible. When you check the “Details Needed” check box, a text field will open allowing you to specify the label that will be used for the text input field on the sign up form. There is an option on the main settings page to hide the details field from the public side, which makes it possible to use this field to collect additional info from your volunteer without it being publicly displayed. Version 2 also adds an additional check box for each task, that is shown when you check “Details Needed”, and that allows you to determine if the details field is required on the sign up form (default). You can un-check that option to make that input field not required to complete the sign-up, allowing you to collect optional extra info for the task/item.

Move tasks – This is a relatively new feature that allows you to move all tasks from the current sheet to another sheet (this is a function added by another contributor). Useful if you want to merge events from two sheets into one, or to “copy” tasks from an old sheet to a new sheet without simply using the copy function from the main sheets list. Please note that the tasks are MOVED (NOT copied) by simply reassigning the sheet id in the database table that stores the tasks, so once you do the move operation, you will lose all tasks in the current sheet.


Administration – All Sheets

Once you have some sheets added, there are several things you can do from the Admin section of this plugin. On the All Sheets page you will see a list-table of all sheets currently in the system, along with some basic info for each.If you hover over the title of any sheet, you will see the following option links:

  • View Sign-ups — Takes you to a detailed list table with a list of all volunteers who have signed up, along with their full contact info, and links to clear or edit each signup, or add signups manually.
  • Edit Sheet — Takes you to the edit sheet page for that event (see above)
  • Edit Tasks — Takes you to the edit tasks page for that event (see above)
  • Copy — Makes a copy of the sheet, appending “copy” to the name. Useful if you have a couple of events that have very similar requirements, as it will copy all sheet and tasks you have entered, and then you can change the name and any other details on the copy you created for the second event. Does NOT copy signups and does NOT change any dates or times (you need to manually edit and change those)
  • Reschedule/Copy — Opens a new form allowing you to choose from three methods: Reschedule, Copy, and Multi-Copy. These functions will change dates/times and will optionally copy signups as well. You can also optionally send the Reschedule emails. More details on each function below. Currently only works with Single and Multi-Day sheets
  • Trash — Moves the sheet to the trash, but does not permanently delete it (click on trash at the top of the table to view trashed sheets and permanently delete them)

Reschedule — If you select this option from the Reschedule/Copy form, you can select a new sheet date for Single type sheets, or a new date for each task for Multi-Day type sheets. For either sheet type you can optionally also select new start and end times for each task (leave blank to keep the original start/end times). Reschedule does NOT create any new database entries. Instead it modifies the dates and times of the existing sheet, tasks, and signups. Other form options are below:

  • Clear Signups – If you check this box, all of the current signups for the sheet and all tasks will be deleted.
  • Send Emails – If you check this box, the Reschedule email will be sent to all current signups for the sheet/tasks (they will be queued up to be sent during the hourly CRON function)

Copy — (from the Reschedule/Copy form page) — With this, you can create an all new copy of the sheet, tasks, and optionally signups, to new dates and times. Works the same way as reschedule, with the same form options, except that the old sheet, tasks, and signups are not change. Instead it creates a new sheet (with the same name), new tasks, and optionally new signups. If you check the “Clear Signups” checkbox for the copy function, the signups will NOT be copied to the new sheet, but they will still remain for the old sheet.

Multi-Copy — This function can be used as a sort of work around to create repeating style events, that repeat at a certain interval of days. You can optionally multi-copy the signups, or use the “clear signups” checkbox to create copies without any signups. If you select this option, then instead of specifying new dates for the sheet/tasks, you will be presented with two new inputs:

  • Offset Interval in Days — Specify the number of days to add to the dates for the sheet or tasks. For Single type sheets, this will be the main sheet date and is the same for all tasks. For Multi-Day sheets, this interval will be added to the date for each task. A good example would be if you had a Multi-Day sheet set up for some weekday events (Monday through Friday). If you want to repeat those every week, you could use Multi-Copy and set the interval to 7.
  • Number of Copies — Sets the number of copies to make at the specified intervals. You may be limited by your server as to how many copies you can make at once without the server timing out, but you can always use the function multiple times to create as many copies as you need.

Visibility — There is a “Visible” column for each sheet on the All Sheets list table. If a sheet is hidden from the public, you will see a red “NO” listed in the column. If you go to the public side, those sheets will not show up in the main volunteer page list or in the widgets unless you are logged in as admin or volunteer sheet manager (in which case you will see the sheet listed, but there will be some red text below it to remind you that the sheet is hidden from the public). Click on “Yes” or “NO” to toggle the visibility of a sheet. It may be useful to have a sheet hidden while you are getting it set up and testing things out, or if you don’t want to make sign-ups available until a certain date.

Bulk Actions — From the main All Sheets list you can use bulk actions to trash or toggle the visibility of several sheets at once. While you are in the trash bin, you can use bulk actions to permanently delete or restore multiple sheets at once.

View/Export ALL Data — The old button that exported all data to CSV has now been changed to this new View/Export ALL Data button. Clicking on this button will now load ALL existing signup data into one large table, using the jQuery DataTables plugin for display. From there you can sort, filter, search, and show/hide columns, to organize your data anyway that you want, and then direct print or export that data to Excel, CSV, or PDF formats. See the next section below for more details on how to use DataTables, as it works the same way as on the individual “View Sign-ups” page.

View Sign-ups Page and DataTables

This is where you can view all your detailed sign-up information for an event. Full name and contact information is shown for each volunteer, and there is a “Clear Spot” link if you need to remove a volunteer from a spot.

The “Actions” column at the end of each row now includes a trash/delete icon, an edit (pencil) icon, and a move (schedule) icon for each signup. Clicking the trash icon will clear that signup (no undo!). Clicking the pencil icon allows you to edit the info for that signup. On empty slots, there will be a Plus (Add Signup) icon to allow you to manually add a signup for that task.

Move Signup. Added in version 4.0.0. On the admin View Signups page for a sheet, in the actions column there is now a third icon (which WordPress dashicons says in the “schedule” icon) that will open up a page to move that signup to a different Sheet/Task/Date. Click on that icon, then select a sheet from the dropdown list (only sheets that aren’t expired will show, and only those that aren’t “No Signups” sheets). When you select a sheet, the Select Task dropdown select will show and be populated with all available tasks & dates for that sheet, with available meaning that there is at least as many open spots remaining as the quantity of the original signup. Once you select a task, a confirmation checkbox will appear that you must check to confirm you want to move the signup. NOTE! – This is a relatively simple function that ONLY changes the task ID and the date for the signup in the signups database table. If the Item Details, for example, doesn’t match between the original task and the one you move to, you’ll need to edit the signup to change the Item Details to make sense for the task you move the signup to. Similarly, if you are using Custom Fields and have created different signup templates to collect different information during signups, and the template for the task you move to doesn’t have the same set of fields, then you will again need to edit the signup after moving to fill in the correct information for those custom fields.

DataTables display and functions

Version 3 changed the View Signups page display to use the jQuery DataTables plugin. By default, some columns will be hidden, such as Task/Item and Date, and the tasks will appear in the ordered entered for the sheet. Group Headings show the task title and date, but those are not printed/exported unless you make those columns visible. You can show or hide any columns using the “Column Visibility” button. If you want to print or export your data, I would suggest hiding the “Actions” column and showing the “Task/Item” and possibly the “Date” columns. If you do NOT want to view, export, or print empty slots, click on the “Hide Remaining” button, which will remove those from the table. If you need to see them again, you will need to reload the page. You can also click on the “Disable Grouping” button to remove the group heading rows, at which point you may wish to make the corresponding columns visible. You can also check the option in the main settings to disable grouping completely for the DataTables.

You can sort by clicking on any of the column headers, and clicking multiple times on the same header toggles between ascending and descending sort order. At the bottom of each column are select boxes that will allow you to select a value for that column, which will then only show entries that have that value. The search box allows you to search for any value within the table and filter to show only rows that match your search text. The searches and filter select boxes only hide/show items, so you don’t need to reload a page if you want to see everything again (just clear the search box, or select “Show All” for the column select filter).

Starting with version 4.1.0 you can also drag and drop the column headers to reorder the columns in the order that you want them for printing or exporting. Note that the dropdown select filters at the bottom of each column need to be destroyed and recreated when you reorder the columns, so they will display the “Show All” value even if you have already filtered by a column value (table rows will still be filtered). It’s best to do the column reordering first, and then do any filtering and sorting that you want.

Once you have your table showing things the way you want, you can use any of the first four buttons to export or print your table info.

New DataTables Feature – Save State. Added in version 4.0. On the admin side, for the View Signups and the View/Export All Data tables, which use the DataTables plugin to view/filter/sort and export data, the Save State function has now been enabled via two new buttons. The “Create State” button will save the current state/view of the table into a new preset (there is no confirmation when you do this). The “Saved States” dropdown select button shows all the states you have saved for that particular table. Click the button then click on the State you wish to restore. You’ll also notice there is a dropdown arrow for each saved state that gives you further functions for that state: Update, Rename, and Remove.

CRON Functions (admin)

The CRON Functions admin page will show you some information about the CRON reminder functions, and also will allow you to manually clear expired signups if you disabled their automatic clearing.In the reminders section, you’ll see data for the last time any reminder emails were actually sent, and then data for the last time the reminders were actually sent. If the CRON function has never run, or no reminders have ever been sent, you may see some strange date/times here. If you are testing, and don’t want to wait for the next hourly CRON reminder check, you can click the Send Reminders button to run the reminders check manually.

Email Volunteers

This is a simple email form that will allow admin users to send a message to all signed-up volunteers for a specific sheet, or to ALL volunteers currently in the sign-up database table (for ALL sheets). This form should be self explanatory, with the exception of the option at the bottom to either send emails individually (one email sent as a “to” email for each volunteer), or to use one email with BCC fields. The reason for one or the other is explained next to the option, and also above for a similar option for the email settings page. If you are using BCC (default), but not all the volunteers are getting the email, the preferred method is to install a SMTP mailer plugin and connect your WordPress site to a real SMTP account (which will be much more reliable anyway). But, if you can’t do that, and your server’s sendmail function doesn’t like the formatting of the BCC headers, then check this box to loop through all volunteer emails and send to one email address at a time. Be aware, however, that this could generate a LOT of emails in a short period of time (if you have a lot of volunteers in the sign-up database), and your server may have spam protection in place that limits how many emails can be sent each other (check with your hosting company).



All you really need to make all the features available to the public is to create a page for your Vounteer sign-up system and insert the main shortcode:


Version 2.4.0 added the [pta_user_signups] shortcode to display only a list of the current user’s signups (with clear links, if allowed) on any page. The show_time argument can also be used with this shortcode.


Version 3 added a Gutenberg editor block, “PTA”, that will help you generate shortcodes with all the possible arguments for signup sheets and user signup lists. However, if you are like me, and hate the Gutenberg block editor, and are using the Classic Editor plugin to keep the original WP editor, then it is highly recommended that you download the free PTA Shortcodes plugin, which will add a PTA icon to your classic page/post editor to create the shortcodes for you.

It is also recommended that you don’t put any other content in the content area of the page or post that you insert the main shortcode since the shortcode will generate different content depending on actions that the user takes.

Public functionality

On the page that you put the shortcode, there will first appear a simple list-table of current volunteer sign-up sheets with start date, end date, and links to “View & sign-up” for each sheet. The default heading of “Current Volunteer Sign-up Sheets” above that table can be changed by adding a “list_title” argument to the shortcode, such as:list_title=”My New Title”

This list will ONLY show sheets where there are still items/tasks whose dates have not already passed. If it’s a recurring or multi-day event, the sheet will still be in the list as long as there still are some dates for items/tasks that have not expired yet. Expired tasks/items will not be counted in the “Open Slots” calculations.

If a user is logged in and has already signed up for anything, then below that main list will be another list showing everything they have signed up for along with a “clear” link that they can use to remove themselves from a sign-up.

When a volunteer clicks on a sheet title or the “View & sign-up” link, the page refreshes and they will see the details for that specific sheet/event. Title, contact info, and any details will be shown at the top, followed by a table of all upcoming tasks/items. For each available spot that has not been filled yet, there will be a “Sign up” link.

When a volunteer clicks on the sign up link for an open spot, the page refreshes and they are shown a simple sign-up form where they enter first name, last name, email, and phone. If the task/item requires details, then there will be an input box for them to enter the task/item details (such as what dish they are bringing to a lunch). If the user is logged in, then their contact info will already be filled in for them if it has already been stored in their user profile (as a minimum, each user account needs an email, so that will always be filled in for logged in users). If they don’t have first name, last name, or phone already stored in their user meta, then after they sign up for their first volunteer slot, that information will be added to the user’s meta, and they won’t have to fill it in for future volunteer sign-ups.

Note that there is a hidden “honeypot” style spambot field on the signup form to help reduce/prevent spam signups from bots (if your signup forms are open to the public). There is nothing to configure for the spambot field.

After a user signs-up for a slot, they will immediately be emailed a confirmation with all the details, and a copy of that will also be sent to the contacts specified for the event.

Displaying a Sign-up Sheet on its own page

If you have a page where you always want to show the list of available sign-ups for a particular event/sheet, you can add the “id” argument to the shortcode. You need to look at the All Sheets list on the admin side to find the ID for a sheet, and then add the argument to the shortcode in the format:id=”1″

With this argument included, the main list of all sign-up sheets will not be displayed, instead you will see the details and list of available sign-ups for that particular sheet. If you have the “Redirect Sign Ups to Main Page?” box check in the main settings, the volunteer will be redirected to the main “Volunteer Sign Up Page” you selected in the settings. If you want to keep them on the same page to signup, then you need to make sure the “Redirect Sign Ups to Main Page?” option is not checked.

Starting with version 2 of the plugin, you can use more than one shortcode on a page to display several single sheets on a page. If you put multiple shortcodes on one page, you will probably need to enable the option “Suppress Duplicate Output?” to avoid duplicate success/error messages, and/or use the redirect option to redirect to a main page for signups.

ALL Available Shortcode Arguments

It is strongly recommended that you use the built-in Gutenberg block, or the PTA Shortcodes plugin (if you are using the classic editor), to see and properly use all the available shortcode arguments, but they are listed here for reference:

  • id – A specific sheet ID to display. ID is shown as the first column on the admin main list of sheets
  • date – Can be used on its own to only show sheets/tasks for a specific date, or can also be used in combination with the id argument to only show tasks for a specific sheet and a specific date (only really useful if that sheet has tasks on multiple dates). Dates need to be specified as: yyyy-mm-dd
  • group – This is used to specify one or more groups to show sheets for when used in conjunction with the Groups extension
  • list_title – Allows you to modify the default title shown above the main list of volunteer sheets
  • show_headers – This allows you to determine if headers should be shown on the individual sheet display. Headers include the sheet title, contact info, and description. Argument values are “yes” or “no”. If not specified, headers will be shown by default (“yes” is default)
  • show_time – Allows you to show or hide the start and end time columns on the sheet display. Argument values are “yes” or “no”. If not specified, times will be shown by default (“yes” is default)
  • show_date_start – Allows you to show or hide the start date column on the main sheets list display. Argument values are “yes” or “no”. If not specified, the start date will be shown by default (“yes” is default)
  • show_date_end – Allows you to show or hide the end date column on the main sheets list display. Argument values are “yes” or “no”. If not specified, the end date will be shown by default (“yes” is default)
  • show_phone – Allows you to show phone numbers on the list of signups. Only works if you are displaying each signup in the task list (versus a consolidated view). Argument values are “yes” or “no”. If not specified, the phone column will NOT be shown (“no” is default)
  • show_email – Allows you to show emails on the list of signups. Only works if you are displaying each signup in the task list (versus a consolidated view). Argument values are “yes” or “no”. If not specified, the email column will NOT be shown (“no” is default). Highly recommended to NOT show emails to the general public where they can be harvested by spambots. You should only use this on password protected pages or when only showing signups to logged in users.
  • order_by – Lets you define the sort order of the list of sheets shown. Can be set to “first_date” (default), “last_date”, “title”, or “id”.
  • order – when used with the above order_by, lets you set the ordering as ‘ASC’ or ‘DESC’ (ascending or descending).

For any of the arguments, the format is the argument id, followed by an equal sign and then the value in quotes. Here is a sample with all arguments shown:

[pta_sign_up_sheet id="" date="" group="" list_title="" show_headers="yes" show_time="yes" show_phone="no" show_date_start="yes" show_date_end="yes" order_by="first_date" order="ASC"]