Shift reminders arrive hours late or not at all. A reminder that should have gone out overnight turns up mid-morning. A broadcast sits on “Sending…” partway through. Meanwhile signup confirmations arrive instantly — and that contrast is the giveaway: delivery is fine, but your site only runs its scheduled email when someone happens to visit it.
The fix: ask your host to run scheduled tasks on a timer
Your hosting company can make the site run its scheduled tasks every few minutes whether or not anyone visits. This is routine work for a host — most call it a “cron job” — and there is nothing to install on your site.
- Open a support ticket or chat with your hosting company.
- Send them the request below, with
example.orgreplaced by your site’s address.
Hi — my site at example.org runs WordPress. Could you set up a server cron job that triggers WordPress’s scheduled tasks (wp-cron) every 5 minutes? Either running “wp cron event run –due-now” with WP-CLI in the site’s directory, or fetching https://example.org/wp-cron.php?doing_wp_cron — whichever you prefer. Please let me know once it’s running, and whether I should add DISABLE_WP_CRON to my wp-config.php.
If the host replies that this is already set up for every site, you are done. If they say to add DISABLE_WP_CRON to your wp-config.php, ask them to add it for you — it stops the site from re-checking the schedule on every page view once the timer is in place.
To check it worked, watch the next shift reminder: it should arrive within an hour of the lead time set under VolunteerPress → Email → Settings, regardless of whether anyone has visited the site.
If you manage the server yourself
Add this line to wp-config.php, above the /* That's all, stop editing! */ line:
define( 'DISABLE_WP_CRON', true );
Then schedule one of the following to run every 5 minutes — in your crontab, or in your control panel’s “Cron Jobs” screen (cPanel and Plesk both have one). The first uses WP-CLI and is preferred; replace /path/to/your/site (the directory containing wp-config.php) or https://example.org with your own values.
*/5 * * * * cd /path/to/your/site && wp cron event run --due-now > /dev/null 2>&1
*/5 * * * * curl -s 'https://example.org/wp-cron.php?doing_wp_cron' > /dev/null 2>&1
To verify, run wp cron event list: vpress_send_reminders should be listed with a next-run time that keeps advancing, and vpress_process_broadcasts appears while a broadcast is sending.
What is happening behind the scenes
WordPress has no always-running clock. Its built-in scheduler — hosts call it WP-Cron — checks for due tasks only when a page on the site is loaded, so on a quiet site tasks wait for the next visitor. VolunteerPress schedules two: an hourly check that sends reminders for shifts entering their lead-time window (which is why a reminder can trail the lead time by up to an hour, and why a lead time of 0 disables reminders), and the batch worker that keeps a broadcast sending until everyone is reached. A server-side timer triggers the same checks every few minutes, so neither ever waits for traffic.