If you have ever noticed that your WordPress website feels a little slow, or that scheduled tasks like sending emails, publishing posts, or running backups do not always happen on time, there is a good chance that WP-Cron is involved. WP-Cron is WordPress’s built-in task scheduler, and while it is very useful, it can sometimes cause performance problems – especially on busy websites.
In this article, we will explain what WP-Cron is, why it can hurt your website’s speed, how to properly disable it, and how to set up a real server-side cron job to replace it. Whether you are a complete beginner or someone with a bit of WordPress experience, this guide will walk you through everything in simple, easy-to-follow steps.
Table Of Contents
What Is WP-Cron?
WP-Cron is WordPress’s internal system for scheduling and running tasks automatically. The name “Cron” comes from a Unix term for time-based job scheduling. In simple terms, WP-Cron allows WordPress to perform certain actions at specific intervals – without you having to trigger them manually.
Some common tasks that WP-Cron handles include:
- Publishing posts that have been scheduled for a future date
- Sending out email digests or notifications to subscribers
- Checking for WordPress core, theme, and plugin updates
- Running website backups (via plugins like UpdraftPlus or BackupBuddy)
- Clearing expired transients and temporary data from your database
- Sending WooCommerce order emails or processing recurring payments
These are all important background tasks that keep your WordPress site running smoothly.
How Does WP-Cron Work?
Here is the important thing to understand about WP-Cron: unlike real server-based cron jobs, WP-Cron does not run on a fixed time schedule set by the server. Instead, it runs every time someone visits your website.
This is how the process works, step by step:
- A visitor loads any page on your WordPress website.
- WordPress checks whether any scheduled tasks are due to run.
- If a task is due, WordPress runs it in the background.
- The visitor’s browser waits while this happens, which can slightly slow down the page load.
This design works reasonably well for small websites with moderate traffic. But it creates a problem: if nobody visits your site, scheduled tasks may not run at all. And if you have a very busy site with thousands of visitors, WP-Cron might run too frequently, adding unnecessary load to your server.
Why WP-Cron Can Cause Performance Problems
WP-Cron’s approach of piggybacking on page visits is clever, but it comes with some significant drawbacks that can negatively affect your WordPress site’s performance.
Problem 1: It Slows Down Page Loads
Every time a visitor loads a page, WordPress checks if there are any scheduled tasks pending. Even when there are no tasks to run, this check still happens. On high-traffic websites, this means that your server is constantly performing these checks, which adds small but measurable delays to your page load times.
When a large task like a database backup or a bulk email send is triggered, it can slow down your site significantly for the visitors who happened to load the page at that moment. They may experience a noticeably slower website without knowing why.
Problem 2: Tasks May Run Too Often or Not Often Enough
On a website with lots of traffic, the same task can be triggered multiple times in rapid succession if many visitors are loading pages at the same time. This can result in duplicate actions – such as sending the same email to subscribers twice.
On the other hand, if your website gets very little traffic – perhaps a low-traffic business site or a staging environment – WP-Cron may not run often enough. A post scheduled to go live at 9:00 AM might not actually publish until someone visits the site hours later.
Problem 3: It Adds Extra Server Load
On shared hosting environments – where many WordPress sites share the same server resources – the constant WP-Cron checks can eat into your allocated CPU and memory. This is especially problematic if you have multiple plugins each scheduling their own tasks. Some hosting providers even flag WP-Cron as a source of resource abuse.
Problem 4: Inaccurate Scheduling
Because WP-Cron relies on website visitors to trigger tasks, the timing is never truly precise. A task scheduled to run “hourly” will only run once per hour at the earliest – but it might actually run every few hours if traffic is low. This can cause inconsistencies in time-sensitive workflows.
Should You Disable WP-Cron?
Disabling WP-Cron is not the right decision for every website. Here is a simple way to decide whether you should disable it:
You Should Disable WP-Cron If:
- Your website gets a moderate to high amount of traffic (hundreds or thousands of daily visitors).
- You notice slow page loading times with no obvious cause.
- You are running plugins that schedule many background tasks (e.g., backup plugins, WooCommerce, email marketing plugins).
- You have access to your server’s cron job system (most hosting control panels provide this).
- You want more reliable, precise scheduling for critical tasks.
You Should Keep WP-Cron Enabled If:
- Your website is small with very low traffic.
- You are on a managed WordPress host that already handles cron jobs for you.
- You do not have access to cPanel or server-level cron job settings.
- Your website does not rely heavily on scheduled tasks.
Important: Disabling WP-Cron without setting up a replacement means your scheduled tasks will simply stop running. Always set up a real server-side cron job before or immediately after disabling WP-Cron.
How to Disable WP-Cron in WordPress
Disabling WP-Cron is done by editing a single file in your WordPress installation: the wp-config.php file. This file contains core configuration settings for your WordPress site and is located in the root folder of your WordPress installation.
Step 1: Access Your wp-config.php File
There are two main ways to access wp-config.php:
Method A: Using an FTP Client
- Download and install an FTP client such as FileZilla (free and widely used).
- Connect to your server using your FTP credentials (host, username, password, and port – usually available in your hosting control panel).
- Once connected, navigate to your website’s root folder. This is usually named public_html, www, or your domain name.
- Look for the file called wp-config.php.
- Right-click on the file and choose Edit or Download to make changes.
Method B: Using Your Hosting Control Panel (cPanel File Manager)
- Log in to your hosting control panel (usually cPanel).
- Look for and click on File Manager.
- Navigate to your website’s root directory (usually public_html).
- Find wp-config.php, right-click on it, and choose Edit.
Step 2: Add the Disable Constant
Once you have the wp-config.php file open, you need to find the following line:
/* That’s all, stop editing! Happy publishing. */
Just above this line, add the following line of code:
define(‘DISABLE_WP_CRON’, true);
Save the file and close it. That single line of code tells WordPress to stop triggering WP-Cron on every page visit. Your wp-config.php section should look something like this:
/** WordPress Database Settings */define(‘DB_NAME’, ‘your_database’);define(‘DB_USER’, ‘your_user’);…define(‘DISABLE_WP_CRON’, true);/* That’s all, stop editing! Happy publishing. */
Setting Up a Real Server Cron Job
Now that you have disabled WP-Cron, you need to set up a real server-side cron job to replace it. A server cron job runs on a true time-based schedule, which is far more reliable and efficient.
The cron job will call WordPress’s cron handler file (wp-cron.php) directly, on a schedule you define – without depending on visitor traffic at all.
Method 1: Using cPanel (Most Common Hosting Method)
Most shared and managed hosting plans include cPanel, which offers a graphical interface for setting up cron jobs easily.
- Log in to your cPanel account.
- Scroll down to the Advanced section and click on Cron Jobs.
- Under Add New Cron Job, you will see fields for setting the schedule.
- Set the interval to Every 5 Minutes (or Every 15 Minutes for low-traffic sites).
- In the Command field, enter the following command (replace yourdomain.com with your actual domain):
wget -q -O – https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Alternatively, if your host supports WP-CLI (a command-line tool for WordPress), you can use:
*/5 * * * * php /path/to/your/wordpress/wp-cron.php
- Click Add New Cron Job to save your settings.
Method 2: Using WP-CLI (For Developers and VPS Users)
If you have SSH access to your server and WP-CLI installed, you can set up a cron job directly via the command line. WP-CLI is a powerful tool that lets you manage your WordPress site from the terminal.
To add a cron job via the command line:
- Open your server terminal via SSH.
- Type the following command to open the crontab editor:
crontab -e
- Add a new line at the bottom of the crontab file:
*/5 * * * * cd /path/to/wordpress && wp cron event run –due-now
- Save the file and exit. The cron job is now active.
Method 3: Using an Online Cron Service
If you do not have access to cPanel or SSH, you can use a free online cron service to trigger your WordPress cron URL at regular intervals. Services like cron-job.org allow you to schedule HTTP requests to any URL – including your wp-cron.php file.
- Create a free account on cron-job.org.
- Add a new cron job with the URL: https://yourdomain.com/wp-cron.php?doing_wp_cron
- Set the interval to every 5 or 15 minutes.
- Save and enable the cron job.
This method is ideal for shared hosting users who do not have cPanel access or for those on very basic hosting plans.
How to Verify That WP-Cron Is Disabled
After making changes to wp-config.php, it is a good idea to verify that WP-Cron has been successfully disabled. Here are two easy methods:
Method 1: Use a Plugin
Install and activate the WP Crontrol plugin from the WordPress plugin repository. Once active, go to Tools > Cron Events in your WordPress dashboard. If WP-Cron is disabled, you will see a notice at the top of the page informing you that the DISABLE_WP_CRON constant is set to true.
Method 2: Check Your wp-config.php Manually
Open your wp-config.php file again and confirm that the line define(‘DISABLE_WP_CRON’, true); is present and has not been removed. If the line is there, WP-Cron is disabled.
Method 3: Inspect Your Server Logs
If you are technically comfortable, you can check your server’s access logs. Before disabling WP-Cron, you would see frequent hits to wp-cron.php in your logs triggered by visitor page loads. After disabling it, those requests should stop appearing – and instead, you should only see requests at your scheduled cron intervals.
Common Issues After Disabling WP-Cron (And How to Fix Them)
After disabling WP-Cron and setting up a server-side cron job, most things should work smoothly. However, here are a few common issues users experience and how to resolve them.
Issue 1: Scheduled Posts Are Not Publishing
Cause: Your server-side cron job is not set up correctly, or there is a delay.
Fix: Verify that your cron job command is correct, that it is running on your expected schedule, and that your hosting server is executing it properly. Check your cPanel cron job logs for errors.
Issue 2: Plugin Backups Are Not Running
Cause: Backup plugins rely on WP-Cron to trigger scheduled backups. If WP-Cron is disabled and no replacement is set up, backups will not run.
Fix: Make sure your server-side cron job is running at least every 15 minutes. Also, check your backup plugin settings to ensure the backup schedule matches a time when your cron job runs.
Issue 3: Email Notifications Are Not Being Sent
Cause: Email-related tasks (like WooCommerce order emails or newsletter digests) are queued through WP-Cron.
Fix: Ensure your server cron job is active and running. You can also install a dedicated SMTP plugin (such as WP Mail SMTP) to handle transactional emails outside of the cron system.
Issue 4: Accidental Re-enabling of WP-Cron
Cause: Some caching or optimization plugins override settings in wp-config.php, which could accidentally re-enable WP-Cron.
Fix: After installing or updating plugins, double-check your wp-config.php to ensure the DISABLE_WP_CRON line is still present.
Alternative: Use a Plugin to Manage WP-Cron
If you are not comfortable editing wp-config.php directly, there are WordPress plugins that can help you manage WP-Cron without touching any files.
WP Crontrol
WP Crontrol is a free plugin that gives you a clear view of all scheduled WordPress cron events. It lets you add, edit, delete, and manually run cron events from your WordPress dashboard. While it does not disable WP-Cron directly, it gives you full visibility and control over what is scheduled. This is very useful for troubleshooting and auditing.
Action Scheduler
Action Scheduler is a library used by popular plugins like WooCommerce. It provides a more robust and scalable task queuing system than WP-Cron. It includes built-in logging, batch processing, and retry logic. If you are running WooCommerce or a similar large plugin, Action Scheduler is already powering many of your background tasks – and it works best when paired with a real server cron job.
Disable WP Cron Plugin
There are simple one-purpose plugins in the WordPress repository – such as Disable WP-Cron – that add the DISABLE_WP_CRON constant for you without requiring you to manually edit wp-config.php. These are ideal for beginners who want the same result without any code editing.
Best Practices for WP-Cron Management
To get the most out of your WordPress scheduled tasks, here are some best practices to keep in mind:
- Always back up wp-config.php before making any changes to it. This way, if something goes wrong, you can restore it quickly.
- Set your server cron job to run every 5 minutes for most websites, or every 15 minutes for low-traffic sites. Running it more frequently than every 5 minutes is rarely necessary and wastes resources.
- Use the WP Crontrol plugin to audit all scheduled events. Remove any tasks added by old, inactive plugins that you no longer use.
- Do not rely on WP-Cron for time-critical operations. Even with a real server cron job running every 5 minutes, there is a potential delay of up to 5 minutes. For truly time-critical workflows, use dedicated queue systems.
- Monitor your cron job logs regularly, especially after updating WordPress, themes, or plugins. Updates can sometimes reset or interfere with cron job settings.
- If you are on a managed WordPress host such as WP Engine, Kinsta, or Flywheel, check whether they already manage cron jobs for you. Many premium hosts replace WP-Cron automatically, which means you may not need to make any changes at all.
How Managed Hosts Handle WP-Cron
Premium managed WordPress hosting providers have recognized the limitations of WP-Cron for a long time, and many of them have implemented their own solutions.
For example, Kinsta – a popular managed WordPress host – automatically disables WP-Cron and replaces it with a real server-side cron job that runs every 15 minutes. Similarly, WP Engine and other premium hosts handle this at the infrastructure level, meaning their customers do not need to worry about it at all.
If you are unsure whether your host manages WP-Cron for you, reach out to their support team and ask. This can save you from accidentally disabling WP-Cron on a host that has already replaced it.
How to Re-enable WP-Cron
If you ever need to re-enable WP-Cron (for example, if you move to a host that does not support server cron jobs, or if you are troubleshooting an issue), the process is straightforward.
Simply open your wp-config.php file and either:
- Remove the line: define(‘DISABLE_WP_CRON’, true);
- Or change it to: define(‘DISABLE_WP_CRON’, false);
Save the file, and WP-Cron will be active again. Remember to also remove or disable your server-side cron job, or you will have both systems running at the same time – which is redundant and wasteful.
Conclusion
WP-Cron is a useful built-in feature of WordPress, but it has real limitations that can hurt the performance and reliability of your website. By understanding how it works and knowing when to replace it, you can take an important step toward a faster, more reliable WordPress site.
To summarize what we covered in this guide:
- WP-Cron is WordPress’s built-in task scheduler that runs on visitor page loads, not on a real time-based schedule.
- It can cause performance issues, duplicate task execution, and scheduling inaccuracies on busy or low-traffic sites.
- You can disable it by adding define(‘DISABLE_WP_CRON’, true); to your wp-config.php file.
- After disabling it, always set up a real server-side cron job using cPanel, WP-CLI, or an online cron service.
- Plugins like WP Crontrol can help you monitor and manage scheduled events from your dashboard.
- Managed WordPress hosts often handle this for you automatically – always check with your host first.
With these changes in place, your WordPress scheduled tasks will run more reliably, your server will not be unnecessarily burdened, and your visitors will enjoy a faster experience on your site.
About the Author
Jay Patel is the Founder of XSquareSEO, a full-service SEO agency with experience in on-page SEO, eCommerce SEO, link building, technical SEO, SaaS SEO, and local SEO. For more information, feel free to contact us.
Explore More Guides
WP Navigation Bar Header
50 Plugins WordPress eShop
Replay Attacks WordPress
Free Broken Links WP Plugin
Nonprofit WordPress Site
Change WP Profile Gravatar
Copy HTML Code WordPress
Half Size Cards WordPress
Deindex WP Tag Pages
Disable Auto Excerpt WP
