WordPress cron not working: schedule AI video jobs reliably
WP-Cron runs only when someone loads a page. Trigger wp-cron.php from a system cron so scheduled AI video jobs start on time.

WordPress cron often looks broken because WP-Cron isn't a clock. WordPress's plugin handbook says it checks the list of scheduled tasks on every page load and runs what's due during that load, so a task set for 2:00 PM waits until the next visit. To make it run on time, call wp-cron.php from your system's scheduler and set DISABLE_WP_CRON to true in wp-config.php.
WordPress facts come from the plugin handbook's WP-Cron overview, system task scheduler and testing pages and the wp_schedule_single_event() reference, read 2026-09-29. For AI video, the same point matters twice: a cron task should only start work or check on it, and Sume's Jobs and results page says video jobs routinely outlast any request you could hold open.
Why is my WordPress cron job not running on time?
Because nothing wakes it up. The handbook says WP-Cron isn't constant like the system cron and is only triggered on page load, and gives the example that a task scheduled for 2:00 PM won't run if no page loads happen until 5:00 PM. A site with few visits can therefore run tasks late. The task isn't lost: the handbook says scheduled tasks go into a queue and run at the next opportunity, meaning the next page load.
How do I make WP-Cron run on a real schedule?
Do the two steps from the handbook: schedule a system task that makes a web request to wp-cron.php, then disable the per-page-load trigger so the work doesn't run twice. On Linux and macOS the handbook uses crontab -e with wget --delete-after; on Windows it uses a Task Scheduler task with PowerShell's Invoke-WebRequest.
| Setup | When scheduled tasks run |
|---|---|
| Default WP-Cron | During a page load, once the task is due |
System task calling wp-cron.php | Whenever your system scheduler makes the request |
System task plus DISABLE_WP_CRON | Only from the system task; page loads stop triggering cron |
# wp-config.php
define( 'DISABLE_WP_CRON', true );
# crontab -e (every 15 minutes; replace the host)
*/15 * * * * wget --delete-after http://YOUR_SITE_URL/wp-cron.phpWhy does my single scheduled event never fire twice?
wp_schedule_single_event() ignores an event scheduled within 10 minutes of an existing event with the same hook, unless you pass unique $args for each event. The reference says the args identify the event, so events for different jobs should carry the job id. The reference also says to use wp_next_scheduled() to prevent duplicate events. Scheduling one check per Sume job, with the job id as the argument, fits that rule.
// Check this job again in 10 minutes. The job id makes the event unique.
wp_schedule_single_event( time() + 600, 'acme_check_sume_job', array( $job_id ) );
add_action( 'acme_check_sume_job', function ( $job_id ) {
// GET the job's polling URL with your Bearer key (server-side only).
// Terminal? Store the result. Otherwise schedule the next check.
} );What should a scheduled task do with a video job?
Start it, or check on it. Don't wait inside the task. Sume's docs say a 30-second wait budget isn't a job duration and that video jobs routinely don't finish inside it, and they recommend async polling or a webhook for work that outlasts 30 seconds. So the task submits the job with an Idempotency-Key built from something stable, because a cron task can run again after a failure: the docs say a same-key retry returns the original job instead of billing a second one.
Pass a callback_url so Sume tells you when the job is terminal. Keep a status check like the one above as the backup: the Webhooks page says a webhook is never the only recovery path.
How do I test that cron fires?
The handbook says you can test cron jobs with WP-CLI: wp cron event list shows what's scheduled and wp cron event run {job name} runs one now. Run the event by hand once before you trust the schedule.
Sources
Related posts
More in Integrations
- WordPress webhook endpoint: receive Sume video callbacks
Register a REST route with register_rest_route, verify the signature on the raw body in PHP, and answer 2xx so Sume stops retrying.
- Workato HTTP connector: call an API with a key and JSON
Workato's HTTP connector calls any HTTP API: a Header auth connection holds the key, and Send request via HTTP POSTs a JSON body and maps the reply.
- wp_remote_post timeout: calling a video API from WordPress
wp_remote_post waits 5 seconds by default. Set timeout yourself, submit the video job, and let a callback deliver the result instead of waiting.
- How to add an MCP server to ChatGPT with developer mode
Turn on ChatGPT developer mode, create an app for the server's URL, and sign in with OAuth. The steps, with Sume's hosted MCP server as the example.
Written by Sume