You schedule a post for 9:00 AM, and at noon it's still sitting there with a red "Missed schedule" label. Or WooCommerce emails go out late, and backups and plugin tasks seem to run whenever they feel like it. The usual cause is WP-Cron, and the standard fix is to hand the job to a real server cron job. This guide shows how to do it in cPanel, including GoDaddy's cPanel hosting, with a backup step first and a one-line undo.
Why WordPress misses scheduled posts
WordPress doesn't have a clock running in the background. Instead, wp-cron.php checks for due tasks when someone visits the site. The comment at the top of that file in WordPress core says so: WP-Cron "is triggered when the site receives a visit," and the file "can be called directly or via a server cron daemon" for sites that don't get enough visits.
That causes three common problems:
- Low traffic: no visits around 9:00 AM means nothing checks the schedule, so the post misses its slot.
- Full-page caching: visitors get a cached copy and WordPress itself never runs, so neither does WP-Cron.
- High traffic: on busy sites, the opposite happens and the check runs far more often than needed.
A real cron job, run by the server on a fixed timetable, fixes all three.
Before you start
- This guide is for hosting with cPanel, which includes GoDaddy's Web Hosting (cPanel) plans. Managed WordPress plans often handle cron for you and may not offer cPanel at all, so check with your host.
- Back up
wp-config.php. In cPanel's File Manager, open your site's folder (usuallypublic_html), right-clickwp-config.phpand choose Download. If anything goes wrong, you can upload this copy to restore it. - Create the cron job before you disable WP-Cron, so scheduled tasks never stop running.
Step 1: Create the cron job in cPanel
- On GoDaddy: go to your product page and, next to your Web Hosting (cPanel) account, select Manage, then cPanel Admin. On other hosts: log in to cPanel.
- In the Advanced section, open Cron Jobs.
- Under Add New Cron Job, set Common Settings to Once Per Fifteen Minutes. The fields fill in as
*/15 * * * *. Every 15 to 30 minutes is plenty for most sites. On shared hosting, don't go below 5 minutes. - In the Command field, paste the following, replacing
example.comwith your domain:wget -q -O /dev/null "https://example.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1 - Click Add New Cron Job. It now appears under Current Cron Jobs.
Here's what the command does. wget requests wp-cron.php the same way a visitor's browser would. -q -O /dev/null keeps it quiet and throws away the response, and >/dev/null 2>&1 stops cPanel from emailing you every 15 minutes. The quotation marks around the address stop the server's shell from misreading the ?.
Alternative: run it with PHP directly
If your site is behind a password prompt, or a firewall blocks the web request, run the file with PHP instead. GoDaddy's cPanel help gives /usr/local/bin/php as the PHP path. Replace USERNAME with your cPanel username, which is shown on the cPanel home page:
cd /home/USERNAME/public_html && /usr/local/bin/php -q wp-cron.php >/dev/null 2>&1
If WordPress is installed in a subfolder, add it to the path, for example public_html/blog.
Step 2: Turn off WP-Cron in wp-config.php
- In File Manager, right-click
wp-config.phpand choose Edit. - Find the line that reads
/* That's all, stop editing! Happy publishing. */. On older sites, it just says "That's all, stop editing!". - Above that line, add:
define( 'DISABLE_WP_CRON', true ); - Click Save Changes.
It has to go above the "stop editing" line, because everything below it loads WordPress. A setting added after that point comes too late to take effect. The constant only stops page visits from triggering cron, and your server job still runs every task on time.
Tested: we checked the define line with PHP's syntax checker, and ran both cron commands against a test wp-cron.php to confirm each one reaches the file and exits cleanly. Copy the commands exactly, including the straight quotes. "Smart" curly quotes from a word processor will break PHP.
Step 3: Test that it works
- Schedule a short test post for 20 minutes from now. Pick something you don't mind going live for a moment, and delete it once the test is done.
- Don't visit the site in the meantime. After the next 15-minute run, check Posts. The post should be Published, not Missed schedule.
- Go to Tools > Site Health. WordPress includes a check that warns when scheduled events are late or have failed, and that warning should clear.
How to undo it
Delete the define( 'DISABLE_WP_CRON', true ); line, or change true to false, then delete the job under Current Cron Jobs. WordPress goes straight back to its default behavior. If wp-config.php was damaged while editing, upload the backup you downloaded.
Troubleshooting
- Posts still miss their schedule: open the command URL (
https://example.com/wp-cron.php?doing_wp_cron) in a private browser window. A blank white page is normal. A 403 error or a challenge page means a firewall or security plugin is blocking it. Allow the URL, or use the PHP method instead. - "Command not found": some servers lack
wget. Trycurl -s "https://example.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1or the PHP method. - Getting emails every 15 minutes: the
>/dev/null 2>&1part is missing, or a cron email address is set at the top of the Cron Jobs page. - Multisite: a single request to the main site doesn't run cron for every subsite. Each site needs its own call, or a WP-CLI-based job.
- Wrong site: make sure the domain in the command matches the site's Settings > General > WordPress Address, including https and www if your site uses them.
FAQ
What causes the WordPress Missed Schedule error?
WP-Cron only runs when someone visits the site. With low traffic or full-page caching, nothing triggers it at the scheduled time, so the post misses its slot.
Where do I add DISABLE_WP_CRON?
In wp-config.php, above the line that says “That's all, stop editing!”. Add: define( 'DISABLE_WP_CRON', true ); and create the server cron job first so tasks never stop.
How often should the cron job run?
Every 15 to 30 minutes suits most sites. Avoid running it every minute on shared hosting.
Is it safe to disable WP-Cron?
Yes, as long as a real cron job calls wp-cron.php on a schedule. That's the setup the code comment in WordPress core describes. To undo, delete the define line and the cron job.