Blog · WebJi® India

Disable WP-Cron

Quick answer: Disable WP-Cron only after a cPanel cron job calls wp-cron.php on a timer. Add DISABLE_WP_CRON in wp-config.php so WordPress stops checking tasks on every page load. Scheduled posts, updates, and plugin backups still run when that server job hits. You know it worked when the next scheduled post publishes on time.
✓ In business since 2005✓ INR + GST billing✓ 24/7 Email Support — avg reply < 60 min
Soft evening clouds reflected in the glass facade of a modern office building at dusk — disable wp cron
Soft evening clouds reflected in the glass facade of a modern office building at dusk — disable wp cron

What does WP-Cron check on each visit?

WP-Cron is WordPress's task list, not a system clock. On each visit, wp-cron.php looks for due events: a scheduled post, a plugin update check, a backup, or a WooCommerce action such as an unpaid order timeout. If nobody loads a page, the list waits. If every visit spawns that check, busy sites spend PHP workers on the scheduler instead of the page.

A real cron job runs whether anyone is browsing. That is the clock this change installs. The plain version of a cron job is on what a cron job is.

  • Low traffic. Tasks wait for the next visitor, so a post can sit as Missed schedule.
  • Cached traffic. A cache hit may never reach PHP, so the check never starts.
  • High traffic. Every hit can spawn wp-cron.php and queue behind real page requests.

This change turns off WordPress's visitor spawn. It does not delete every cron on the server. A Linux crontab for backups or mail is a different job, covered on the cron explainer linked above. To turn the visitor spawn back on, delete the constant and remove the cPanel WordPress job.

When should you disable WP-Cron?

Disable WP-Cron when a scheduled post shows Missed schedule, the HTML is served from cache so PHP never runs, traffic is rare at night, or a backup must run whether anyone visits. Leave the default alone on a small uncached site where tasks already finish and the extra PHP hit is invisible.

Do not add DISABLE_WP_CRON and stop. With no server job, publishing and update checks simply pause. On WordPress hosting you add the job in cPanel, then the constant.

How do you replace WP-Cron with a cPanel job?

On cPanel hosting, create the server job before you touch wp-config.php. If the constant goes in first, scheduled posts and plugin queues wait with no error until something calls wp-cron.php.

  1. In cPanel, open Advanced, then Cron Jobs. Use the login for this domain. The billing screen has no cron form.
  2. Add a new job. Pick Once Per Fifteen Minutes, or set Minute to */15 and Hour, Day, Month, and Weekday to *.
  3. Set Command to wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1. Replace example.com with the address that loads this WordPress site. The tail of the line drops output so cPanel does not mail you on every run.
  4. In File Manager, edit wp-config.php in the WordPress folder. Above the stop-editing comment, add define('DISABLE_WP_CRON', true); and save. That line blocks the visit spawn. The cron command can still call the file.
  5. Schedule a draft a few minutes ahead. It worked when the post is live after the next run. Saving the file alone is not the test.

How often should the server cron run?

Fifteen minutes is the default that fits a blog, plugin update checks, and a nightly backup. Five minutes is for a post or a shop action that should land close to the clock. Once an hour leaves scheduled posts late. Every minute overlaps on shared hosting.

IntervalUse it whenWhat you give up
Every 15 minutes (*/15)A blog, update checks, and nightly backupsA post can publish up to 15 minutes late
Every 5 minutes (*/5)A post or shop action that should land close to the clockMore PHP runs on a quiet account
Every minuteAlmost never on shared hostingOverlapping runs and cron mail

The doing_wp_cron flag on the URL tells WordPress this request is the direct run. It is not a second scheduler. On a multisite network, one URL runs tasks for that site only. Each other site needs its own cron URL, or its events keep waiting.

How do you know the cron job ran?

Saving wp-config.php does not prove the job ran. Install the WP Crontrol plugin and open Tools, then Cron Events. After one interval, next-run times move forward. A red missed mark that never clears means the command did not fire.

You can also let cPanel email the output for a single cycle. A blank message is normal for this wget line. An error names a wrong domain or a blocked wp-cron.php. Turn that mail off after the one check, or the inbox fills every 15 minutes.

Opening the wp-cron.php URL once in a browser runs whatever is due right then. That is a manual poke, not a schedule. Leave the cPanel job in place.

What still fails after you disable WP-Cron?

If the constant is set and tasks still miss, the server job is the thing to fix. The message that spawning is disabled is expected. It is a fault only when no cron command calls wp-cron.php.

  • Posts still miss. The interval is wider than you need, or the command fails. Read one emailed error before you tighten */15 to */5.
  • Nothing runs at all. The define line is below the stop-editing comment, or it sits outside the opening PHP tag. Move it above that comment.
  • Two runners at once. The constant is missing and a server job also fires, so events overlap. Keep one runner.
  • Backups stay idle. The plugin must be set to WP-Cron, not a URL of its own. Check its last-run time after one interval.
  • wp-cron.php returns 403. A firewall or a rule in .htaccess is blocking the file. The cron mail shows the 403. Allow that file for the server call.

If the cron mail shows a path you cannot change, email support@webji.services with the command and the time. Do not call the office number. That line is not a support queue.

Frequently Asked Questions

How do I disable WP-Cron in WordPress?

Create the cPanel cron job that calls wp-cron.php first. Then add define('DISABLE_WP_CRON', true); in wp-config.php above the stop-editing line. Visits stop spawning tasks, and the server job runs whatever is due.

What is WP-Cron used for?

It publishes scheduled posts, checks for plugin and theme updates, and runs plugin work such as backups and shop timeouts. It is a list of due tasks, not a clock on the server.

What happens if I disable WP-Cron and add no server job?

Scheduled posts stay unpublished, update checks pause, and plugin queues wait. The dashboard does not show an error. Add the cPanel job before the constant, or delete the constant until that job exists.

Where do I add DISABLE_WP_CRON in wp-config.php?

Open wp-config.php in the WordPress root and put the line above the comment that says stop editing. Below that comment, WordPress does not read it.

How often should the WordPress cron job run?

Every 15 minutes fits most sites. Use every 5 minutes when a scheduled post or a shop action must land close to the clock. Do not use every minute on shared hosting.

Why does WP-Cron slow a busy site?

Each visit can start wp-cron.php, and that request waits for a PHP worker. On a busy site those extra requests pile up. One server job takes the spawn off the page load.

Need help with this?

WebJi® support does it for you — free. Talk to our Jaipur team →