WordPress comes with its own scheduling system for recurring tasks, known as cron jobs.
If you’re not familiar, “cron” comes from the Unix world and simply means “Command Run On”.
In WordPress, cron handles tasks such as publishing scheduled posts, sending emails, clearing transients, and running plugin or theme tasks in the background.
The problem? By default, WordPress cron doesn’t run the same way as a real server-level cron. Instead, it only gets triggered when someone visits your site.
At the end of a page load, WordPress quietly checks whether any scheduled tasks are due and runs them.
This setup leads to two big issues:
- Low-traffic sites miss tasks: If your site doesn’t get visitors often or if pages are cached, cron jobs may run late, or not at all.
- Performance bottlenecks: If a cron job takes too long, it can tie up PHP processes and impact the site speed for real visitors.
Luckily, there are straightforward ways to fix this and make cron jobs reliable.
💡 Note: If you’re on a managed WordPress host, they may already handle cron at the server level. Check with your host before making any changes.
Step 1: Disable the Default WP-Cron
We don’t want WordPress relying on random visitors to trigger cron anymore. To disable it, open your wp-config.php file and add:
define('DISABLE_WP_CRON', true);
This doesn’t stop cron jobs from running. It prevents WordPress from running them in the inefficient default way.
Step 2: Set Up a Reliable Cron Trigger
Once WP-Cron is disabled, you’ll need a proper scheduler.
Here are three methods, ranging from easiest to most advanced:
Option 1: Use cron-job.org (Beginner-Friendly)
If you're looking for a quick, no-setup solution, cron-job.org offers a free service that pings your site at regular intervals to trigger cron.
Follow these simple steps:
- Create a free account at cron-job.org.
- Add a new cron job with these settings:
- Title: Your Website Name
- URL: https://yourwebsite.com/wp-cron.php?doing_wp_cron
- Schedule: Every 1 minute
Replace “yourwebsite.com” with your actual domain.
That’s it! Your WordPress cron will now run every minute, no matter how much traffic you get.
⚠️ Note: Some hosts might block frequent requests. If needed, ask your host to whitelist these IP addresses from cron-job.org:
195.201.26.157
116.203.134.67
116.203.129.16
23.88.105.37
Option 2: Use cPanel (Intermediate)
If your hosting provider provides cPanel, you can schedule a real cron job directly from your control panel.
Here are the steps to follow:
- Log into cPanel ⇨ search for Cron Jobs (under “Advanced”).
- Under Common Settings, choose: Every Minute (* * * * *).
- In the Command field, enter one of these options depending on your server setup:
Using PHP CLI (recommended):
/usr/local/bin/php /path/to/public_html/wp-cron.php >/dev/null 2>&1
Using wget:
wget -q -O - https://yourwebsite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Using curl:
curl https://yourwebsite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
- Click Add New Cron Job.
Your tasks will now run automatically every minute without depending on site visitors.
Option 3: Use WP-CLI + System Crontab (Advanced / Best)
For maximum reliability, you can combine WP-CLI (WordPress Command Line Interface) with your server’s system crontab.
Follow these step-by-step instructions:
- SSH into your server.
- Open your crontab file for editing:
crontab -e
- Add this line (replace the path with your WordPress installation):
* * * * * cd /path/to/your/wordpress && wp cron event run --due-now >/dev/null 2>&1
This does the following:
- Moves into your WordPress directory
- Runs all due cron events via WP-CLI
- Executes every minute
- Silences any output
Save the file, and your server will now run WordPress cron events like clockwork without relying on traffic or third-party services.