Why are my scheduled WordPress posts late? WP-Cron and a real server cron
In short: WP-Cron, WordPress's scheduler, isn't a real clock: a task that's due runs when the next request reaches the site. On a site with few visitors, one served from a page cache, or one with DISABLE_WP_CRON set and no server cron in its place, automatic article runs start late or never. Wiozen Content Bot shows "late" on its Overview tab once the next run is more than 15 minutes overdue. The lasting fix is to turn WP-Cron off and have a server cron job call wp-cron.php every few minutes.
Why doesn't WP-Cron run on time?
WordPress keeps scheduled tasks in a list in the database. On every page request it checks that list, and if a task is overdue it calls wp-cron.php in the background to run it. So a run set for 9:00 starts with the first request after 9:00. On a site nobody visits overnight, it waits until the first visit in the morning.
Three causes come up most. Low traffic is the first. The second is page caching: a caching plugin or server cache that hands visitors ready-made HTML never starts WordPress, so that visit doesn't trigger WP-Cron either. The third is a define('DISABLE_WP_CRON', true); line in wp-config.php, which some hosts add themselves. With that line in place and no server cron instead, scheduled tasks never run.
Late tasks don't pile up. WordPress doesn't try to catch up on every missed interval; the task runs once and is scheduled for its next slot. If an hourly site goes six hours without a visit overnight, one run happens in the morning, not six.
How do I know the bot's run is late?
One of the summary boxes on the plugin's Overview tab is Next run, which shows the time of the run. If more than 15 minutes have passed since that time and the run hasn't started, the box says "late; scheduled tasks may not be running". If it says "not scheduled" instead, cron isn't the issue: the bot looks on but there's no schedule entry, and saving the Connection and automation tab once sets the run up again.
The schedule is only created when two things are true together: an API key is saved and Run the bot is ticked. When you tick it and save, or change the frequency, the first run is set for 5 minutes later and the rest follow at the interval you chose. There are five frequencies: every hour, every 3 hours, every 6 hours, twice a day and once a day (the default). Each run writes, for every active category, the number of articles set in that category, up to 5.
It's worth telling a cron delay apart from a run that was cut off midway. If a run started but didn't finish, the dashboard shows "The run is stuck"; that case is covered in the guide on runs stopping halfway. "late" means the run never started.
How do I set up a real server cron?
A server cron is the host's operating-system scheduler, and it runs whether anyone visits or not. Setting it up takes two steps: switch off WordPress's visit-triggered cron, and call wp-cron.php at a regular interval.
- In
wp-config.php, add the first line below above the/* That's all, stop editing! */line. If the line is already there, leave it and just do the second step. - In your hosting panel ("Cron Jobs" in cPanel, "Scheduled Tasks" in Plesk), add a job that runs every 5 minutes with the second line below as its command. Replace the address with your own domain.
- After the next run time, look at Overview. If "late" is gone and the Log tab has new lines, the setup works.
define('DISABLE_WP_CRON', true);
*/5 * * * * curl -s "https://example.com/wp-cron.php?doing_wp_cron" > /dev/null 2>&1Don't make the interval longer than 5 minutes. The bot's scheduled run isn't its only cron task: the chunks that make up a run, the image queue's retry every 15 minutes and the watchdog that closes a stuck run are WP-Cron events too. With a 30-minute cron, all of them wait up to 30 minutes.
How does the bot behave with DISABLE_WP_CRON on?
The Run now button doesn't depend on cron. The bot opens the run and starts the first chunk with a background request to the site's own admin-ajax.php, and later chunks call each other the same way. That's why a manual run can work while scheduled runs don't. If "Run now" is fine but scheduled runs never arrive, cron is the first thing to suspect.
Each chunk also leaves the same job behind as a WP-Cron event. If the background request is blocked by a security plugin or the password gate of a staging site, the run moves on through that fallback. With WP-Cron on, the fallback runs with the next visit; with DISABLE_WP_CRON on, it waits for the server cron's next call. On a 5-minute cron that can add a few minutes between article steps in the worst case.
The Retry all now button in the panel of drafts waiting for images also picks one of two paths. With WP-Cron on it hands the work to the background and the page returns right away; with DISABLE_WP_CRON defined it generates the images in the same request, and the page waits until they're done.
What if I can't set up a server cron?
- Some cheap plans have no cron. In that case keep WP-Cron on and pick a frequency that fits your traffic: once or twice a day runs close to its time even on a site with a handful of daily visits.
- If you use page caching, make sure the cache leaves
wp-cron.phpalone. Most caching plugins already do. - Keeping the dashboard open during a run also helps: Overview sends a request every 4 seconds, and with WP-Cron on those requests trigger any task that's due. It isn't a lasting fix, though.
- An outside uptime or monitoring service that opens the site every few minutes also triggers WP-Cron, but only if the page isn't served from cache.
The rest of the setup, categories and the draft or live choice are in the auto-publishing guide.
Frequently asked questions
When does the "late" notice appear?
When more than 15 minutes have passed since the next run's time and it still hasn't started. That usually means WP-Cron isn't being triggered.
When does the first run start after I turn the bot on?
5 minutes after you save. Changing the frequency resets the schedule, and the first run is again set for 5 minutes later.
I added DISABLE_WP_CRON and the bot writes nothing. Why?
That line turns off WordPress's own scheduler. Unless you set up a server cron that calls wp-cron.php, scheduled runs never start. "Run now" keeps working because it doesn't depend on cron.
How often should the server cron run?
Every 5 minutes is a good value. The run's chunks, the image queue and the watchdog that closes a stuck run are also cron events, so a longer interval delays them.
Do missed overnight runs all fire in the morning?
No. WordPress runs a late task once and schedules it for its next slot; missed intervals don't pile up.
If you haven't installed it yet, download the plugin from the Content Bot page, and try one "Run now" before you switch the schedule on.
More guides: How can you use an AI API from Turkey without a credit card? · How do you connect an OpenAI-compatible API to a tool you already use? · How do you calculate the cost of an AI API? · What should I do if my AI API key has leaked? · How do you generate images with an AI API, and what does one image cost? · Why does my AI API return a 429 error, and how do I fix it? · Why do long AI API requests time out: streaming or non-streaming? · Anthropic Messages API or OpenAI Chat Completions: which one should I use? · What is a context window, and what is a 1 million token context good for? · Which AI model should I choose: deciding by price, context and quality · Why does a reasoning model return an empty answer, and why are thinking tokens charged? · Why is my API balance running out faster than expected? Tracking spend request by request · How do you convert a web page to Markdown to feed it to an AI model? · How do you get AI to write and publish articles in WordPress automatically? · How do you find blog topics from RSS feeds and Google Trends? · Does AI-written content show up on Google and in AI answers? · How do you get internal links into AI-written WordPress articles? · How do you get AI to generate a different featured image for every WordPress post? · How do you write a content brief when an AI writes your blog posts? · What should you watch for when an AI writes recipes for your food blog? · How do you fix errors when connecting a WordPress plugin to your AI API account? · Why does my AI article bot stop halfway in WordPress? "Run is stuck" and LiteSpeed · How do I get an AI article bot to write blog posts in English or another language? · What does "Content Bot cannot generate articles" mean? Reading the bot's log