Cron Isn’t Firing on Time
Several Benecaster features — manual grant expiry, payment-failure reminders, renewal reminders, episode availability unlocks, email delivery, license validation, analytics snapshots — run on a scheduled background task called WP-Cron. If these features feel late or stuck, the most likely cause is how WP-Cron works by default.
How WP-Cron Works
WordPress’s built-in cron system (wp-cron.php) does not run on a real time-based schedule. It piggybacks on inbound web traffic: when someone visits any page on your site, WordPress checks whether any scheduled tasks are due and runs them at that moment.
On a high-traffic site this is effectively real-time. On a low-traffic site — a new podcast still growing its audience, a site that gets most of its visits at specific times — there can be gaps of hours between cron firings. A task scheduled for 3:00 AM may not run until the first visitor arrives the next morning.
What You Might Notice
| What feels wrong | Underlying cron hook |
|---|---|
| Manual grants not expiring on time | benecaster_manual_grant_expiry (hourly) |
| Renewal reminder emails never arrive | benecaster_renewal_reminder_cron |
| Episode availability unlocks are late | benecaster_availability_check |
| Emails stuck in the queue | benecaster_process_email_queue |
| License status feels stale after a plan change | benecaster_license_validation |
| Analytics daily snapshots have gaps | benecaster_analytics_daily_snapshot |
| Feed sync not picking up new episodes | benecaster_feed_sync |
| GDPR / analytics retention purges not running | benecaster_retention_purge |
First Check
Visit any wp-admin page. That’s the fastest way to trigger WP-Cron immediately — admin requests fire cron just like front-end visits. If the delayed action runs shortly after, the cron itself is fine and it was simply waiting for a visitor.
Install WP Crontrol (free plugin). It shows every scheduled benecaster_* event with its next run time. If an event is listed as overdue by hours, WP-Cron has been quiet on your site. If an event is missing from the list entirely, it may not have been registered — contact support.
Check for DISABLE_WP_CRON. Search your wp-config.php for this line:
define( 'DISABLE_WP_CRON', true );
If it’s present, WordPress’s built-in cron is fully disabled. This is the right setting for a site using a real cron, but if no real cron is actually in place, all scheduled tasks will never run. Either remove the line or add a real cron as described below.
The Durable Fix
WordPress’s built-in cron is inherently traffic-dependent. The reliable solution is a real OS-level cron job on your host — this is a host or developer task, not something Benecaster can configure from inside the plugin.
To set this up, ask your web host or developer to run one of these every 5 minutes:
Option 1 — HTTP ping (works on any host with curl):
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null
Replace example.com with your site’s domain.
Option 2 — WP-CLI (preferred on managed hosts that support it):
*/5 * * * * cd /var/www/html && wp cron event run --due-now >/dev/null 2>&1
Replace /var/www/html with your WordPress root path.
Once a real cron is in place, also add this to wp-config.php to prevent double-firing (both the real cron and visiting traffic trying to run scheduled tasks):
define( 'DISABLE_WP_CRON', true );
For full setup instructions, see WordPress’s official guide: Hooking WP-Cron Into the System Task Scheduler.
Most managed WordPress hosts (WP Engine, Kinsta, Flywheel, etc.) configure a real system cron by default. If you’re on one of these hosts and still seeing delays, check with their support team that WP-Cron is enabled and not throttled.