Everything in VolunteerPress is built from three records: opportunities, the ongoing programs volunteers browse; shifts, the specific times they attend; and signups, one volunteer claiming a spot at one of those times. Once the three are clear, every screen in the plugin is predictable — each one is a different view of the same records. This page uses a food bank as the running example.
Opportunities are the programs
An opportunity is a role or program, not a date: “Saturday Pantry” — sorting groceries and serving neighbors — or “Delivery Driver”. It is a real page on your site, with a title and a description you edit like any other page, plus a default location and a category if you use them. It stays published for as long as the program runs; the dates come and go underneath it.
In the admin, opportunities live under VolunteerPress → All Opportunities, and the Opportunity Details box on each one holds its settings.
Shifts are the times
A shift is one block of time on one opportunity’s schedule: a start, an end, and a capacity — the number of volunteers it can take, where 0 means unlimited. The Saturday Pantry might have a shift every Saturday from 9:00 AM to 12:00 PM with room for ten volunteers; a holiday food drive might add a single Friday evening shift for twenty. Shifts are created one at a time or generated as a daily or weekly recurring series — and a series is just a batch of ordinary shifts, each editable on its own.
Every shift belongs to exactly one opportunity. The opportunity’s page lists its upcoming shifts automatically, each with its spots remaining and a Sign up button, and past shifts drop off on their own — there is nothing to close or archive. In the admin, VolunteerPress → Shifts shows every shift across all opportunities in one filterable list.
Signups connect a volunteer to a shift
A signup is one volunteer claiming one spot on one shift. Volunteers make them on your site with a short form — name, email, optional phone, and any custom questions the opportunity asks. No account or password is involved: the email address is how VolunteerPress knows who a volunteer is. A signup always has one of three statuses:
- Confirmed — the volunteer has a spot.
- Waitlisted — the shift was full when they signed up; they are promoted automatically if a spot opens. See Waitlists.
- Cancelled — cancelled by the volunteer or by a coordinator; the record is kept.
Signups are also where volunteer records come from. When the same email address signs up again, the new signup joins the same volunteer’s history: sign up for the pantry three Saturdays running and you are one volunteer with three signups, not three volunteers. A person appears under VolunteerPress → Volunteers with their first signup, and their history grows with each one after.
How they nest
One opportunity has many shifts; one shift has many signups; one volunteer collects signups across every opportunity. At the food bank, the whole program might look like this:
- Saturday Pantry — an opportunity
- Saturday, 9:00 AM to 12:00 PM, capacity 10 — a shift, currently full: 10 confirmed signups, 2 waitlisted
- The following Saturday, same times — another shift, with 6 confirmed signups
- Delivery Driver — a second opportunity
- Friday, 1:00 PM to 3:00 PM, capacity 2 — one confirmed signup, one spot open
Two consequences are worth internalizing:
- Capacity and the waitlist live on the shift, not the opportunity. The 9:00 AM pantry shift can be full with a waitlist while the same opportunity’s next shift is half empty.
- Email follows the signup. Confirmations, reminders, and change notices go to the volunteers on a specific shift’s signups — signing up is what puts someone on a shift’s roster. How email works covers each message.
Where signup modes fit
One setting controls who can see all of this: Signup mode, in the Opportunity Details box. The two Public modes make the opportunity visible everywhere volunteers look — its own page, the Opportunities List block, and the calendar — and the signup form works the same in both. Private — hidden from the public archive removes the opportunity and its shifts from every public list and page; coordinators still see it in the admin and can preview its page. Use Private while you draft a program, or for roles you fill by invitation.
What each admin screen is
Every VolunteerPress screen is the same three records viewed from a different angle:
- All Opportunities — the programs. Each one’s edit screen holds its description, its details, and the door to its shifts.
- Shifts — every shift across all opportunities, with fill counts and filters.
- Shift signups — every signup, filterable by opportunity, status, and recency.
- Volunteers — the people: one entry per email address, each with its signup history.
- Dashboard — today’s cut of all three: current numbers, shifts that still need volunteers, recent signups.
- Email — messages to the people on those signups, automatic and composed.
- Reports — the same records totalled: how signups are trending and how well shifts are filling.
To put the model to work: Managing opportunities and shifts covers the schedule side, Managing signups covers the people side, and Waitlists covers what happens when a shift fills.