Fix WordPress “Missed schedule”: replace WP-Cron with a real cron job in cPanel

Step-by-step for cPanel and GoDaddy hosting, with a backup step first, tested commands and a one-line undo.

By ScrillaB · Updated · Written with AI assistance and checked before publishing

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:

A real cron job, run by the server on a fixed timetable, fixes all three.

Before you start

Step 1: Create the cron job in cPanel

  1. 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.
  2. In the Advanced section, open Cron Jobs.
  3. 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.
  4. In the Command field, paste the following, replacing example.com with your domain:
    wget -q -O /dev/null "https://example.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
  5. 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

  1. In File Manager, right-click wp-config.php and choose Edit.
  2. Find the line that reads /* That's all, stop editing! Happy publishing. */. On older sites, it just says "That's all, stop editing!".
  3. Above that line, add:
    define( 'DISABLE_WP_CRON', true );
  4. 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

  1. 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.
  2. Don't visit the site in the meantime. After the next 15-minute run, check Posts. The post should be Published, not Missed schedule.
  3. 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

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.