Copy the link to a markdown format of this article for ChatGPT, Claude, Gemini, or your favorite AI.
Cron jobs are an often overlooked component of a reliable WooCommerce store. Behind the scenes, they automate essential tasks like subscription renewals and cleaning up the database. Without them, many of your store’s features would stop working or behave unpredictably.
WordPress uses a built-in scheduling system called WP-Cron to handle task automation. It works well for many use cases, but it has limitations that can affect store performance and reliable task automation, especially as your WooCommerce site grows.
In this article, we’ll explain what WP-Cron is, how WooCommerce depends on it, how you can monitor and manage WooCommerce cron jobs, and several techniques for adding custom cron jobs.
What Is WP-Cron and What Does WordPress Use It For?
WP-Cron is WordPress’s built-in task scheduler. It is triggered whenever someone visits your site. Every page load prompts WordPress to check whether any scheduled tasks — known as cron events — are due to run.
WooCommerce and its extensions can use WP-Cron to automate some store operations. Examples include:
Processing subscription renewals
Sending abandoned cart reminders
Syncing inventory with external systems
Generating product feeds for ad platforms
Sending follow-up emails or review requests
Cleaning up expired transients or session data
If tasks didn’t run reliably, your store wouldn’t provide the ecommerce experience that shoppers expect. Orders could be missed, customers wouldn’t get emails, and your stock levels would be inaccurate — all without any visible warning. That’s why understanding WP-Cron and how it affects WooCommerce is useful for maintaining a healthy and dependable store.
WP-Cron vs. Action Scheduler for WordPress Automation
WooCommerce stores include two different systems for task automation: WP-Cron, the default WordPress scheduler tied to site traffic, and Action Scheduler, a queue-based alternative that is installed alongside WooCommerce. Action Scheduler is an Automattic-developed, standalone scheduler that can also be used with other plugins.
Both systems can handle background processes like order updates or email notifications, but they differ in reliability, scalability, and execution control. As we’ve mentioned, WP-Cron’s traffic-dependent design can be inadequate for mission-critical operations. Action Scheduler, which is widely used by WooCommerce’s core functionality, addresses these limitations through intelligent queue management.
It processes tasks incrementally to prevent server overload, with built-in retries for failed actions. WooCommerce relies on it for payment processing and real-time order updates, where split-second reliability matters.
WP-Cron is easy to use and reliable enough for simple tasks like daily reports. Action Scheduler is the better option for complex workflows and high-volume operations like bulk email campaigns.
In this article, we’re primarily focused on simple WordPress automations, so we’ll explore WP-Cron in more depth. If you’re looking to implement complex, time-sensitive automations that consume significant resources, check out the Action Scheduler documentation.
WP-Cron vs. System Cron
WP-Cron is not a true cron system. It does a similar job to the cron utility on Linux (and other Unix) servers, but it works differently and is more limited. Most importantly, WP-Cron only runs when someone visits your WooCommerce store.
A system cron, in contrast, is a server-level scheduling tool that runs on fixed time intervals, independent of web traffic. It’s used to execute commands or scripts at precise times and is generally more reliable for high-frequency or performance-critical tasks.
Managed WordPress hosting plans — including those optimized for WooCommerce — do not allow direct access to system-level cron jobs. Misconfigured or overly aggressive jobs result in excessive server load, conflicting schedules, or runaway processes, all of which can degrade your WooCommerce store’s speed or even cause outages.
However, WooCommerce store owners can view, manage, and add custom cron jobs to WP-Cron, as we explain below.
The Limitations of WP-Cron
WP-Cron performs essential background tasks, but it has limitations that can impact automation reliability:
Delayed execution during low-traffic periods: Scheduled tasks like subscription renewals or email follow-ups may run late.
Overload on high-traffic sites: On busy stores, WP-Cron may trigger multiple times in rapid succession, resulting in overlapping tasks, slow performance, or even request timeouts.
No built-in alerting or failure reporting: WordPress cron jobs fail silently. Store owners often don’t notice until something breaks and they experience missed emails or customer complaints.
Vulnerable to misuse by plugin developers: Some plugins schedule excessive or unnecessary tasks and run them more often than needed. This adds load and increases the risk of delays for more important processes.
Misbehaving cron jobs can degrade performance. Background tasks may compete with customer-facing activity for server resources, slowing page loads or the checkout flow. If too many tasks accumulate — thousands of queued emails or imports — WP-Cron becomes a bottleneck that hurts your store’s consistency and responsiveness.
How to Monitor and Manage Scheduled Tasks in WooCommerce
A failed or delayed cron event is often the culprit when a task you expect to be completed isn’t. WordPress’s cron provides no visibility into what has failed or why. However, you can view and manage scheduled events using WordPress plugins developed for that purpose.
Let’s look at how you can inspect scheduled cron jobs, identify common issues, and streamline the task schedule.
Use a Plugin to Inspect Scheduled Events
The best way to inspect and manage WP-Cron is to install the plugins Advanced Cron Manager or WP Crontrol. They add a new section to your WordPress admin menu under Tools where you can:
View scheduled events
See the associated hook name
Check the next scheduled run time and recurrence
Manually execute or delete events
Create custom schedules and one-off jobs
You can use this information to diagnose performance issues potentially caused by cron jobs.
Check for overdue tasks: Look for events that show a scheduled time in the past but haven’t run. They may be stuck or missed because of low traffic or conflicts.
Identify heavy or frequent jobs: Review the schedule column. If a plugin is unnecessarily scheduling tasks every minute or five minutes, consider adjusting the frequency or disabling the task.
Manually trigger a task: Use the “Run now” option to test whether a job executes as expected. Manual triggering is useful for confirming that a hook is functional and not throwing an error.
It’s safe to delete tasks tied to plugins you no longer use. If a hook name is unfamiliar, consult the plugin documentation or temporarily disable the plugin to verify whether it is responsible for the task.
Avoid deleting scheduled events that are still in active use. Removing a necessary task can break important WooCommerce functions. When in doubt, make a backup or consult a developer before making changes.
For a quick overview of scheduled tasks on your Pressable-hosted WordPress sites and WooCommerce stores, you can also visit “Cron Events” under the “Advanced” tab in the Pressable Control Panel
WordPress Cron Job Maintenance Tips
Keeping an eye on your store’s WP-Cron schedule can prevent delays, reduce performance issues, and keep key automations functioning as intended.
Review your cron schedule monthly to spot missed or overdue tasks.
Audit plugins that add frequent or unnecessary cron jobs.
Remove jobs linked to deactivated or uninstalled plugins.
If you find that WordPress cron jobs are not running when you expect them to, it may be because your store is experiencing periods of low traffic. Remember, WP-Cron only works when a visitor loads a page. To make sure scheduled jobs are run, you can visit yoursite.com/wp-cron.php or use a service like Uptime Robot to periodically visit it for you.
Adding Custom Jobs to WP-Cron
Most WooCommerce sites rely on plugins to schedule automated tasks, but you can also create custom cron jobs. Custom scheduling is useful when your store has automation needs that aren’t addressed by off-the-shelf plugins.
Use cases include:
Sending scheduled email reports to staff or suppliers
Updating product prices based on external data feeds
Syncing inventory or order data with third-party systems
Automatically rotating featured products or promotional banners
Clearing custom caches or expired metadata
How do WordPress Cron Jobs Work?
Before scheduling a custom job, it’s helpful to understand how WordPress’s event system works:
Hook: A hook is a named reference used by WordPress to trigger a function. There are two types: actions (which do something) and filters (which change something). WP-Cron uses action hooks to schedule tasks.
Callback Function: This is the piece of code that runs when the hook is triggered. You define what the function should do, such as sending an email or updating a product. You can put callback functions in your theme’s functions.php file, in a child theme, or in a custom plugin.
Event: A scheduled event links a hook to a specific time and recurrence interval. When WP-Cron runs, it checks for events that are due and fires the corresponding hooks.
You schedule an event by registering a hook, linking it to a callback function, and telling WordPress when to run it.
Using Plugins to Schedule WooCommerce Tasks
The safest way to add custom cron jobs in WooCommerce is with a plugin like WP Crontrol or Advanced Cron Manager. These tools allow you to manage and create scheduled events from the WordPress dashboard.
However, to schedule your own custom task, you need to define the callback function in code and connect it to a hook using add_action(). Here’s a simple example.
1. Create the callback function in your theme’s functions.php file or in a child theme.
For example:
function send_inventory_report() {
// Your custom logic here
wp_mail( 'admin@example.com', 'Inventory Report', 'Report generated.' );
}
add_action( 'send_inventory_report_hook', 'send_inventory_report' );
The callback function sends an email and is connected to the custom hook send_inventory_report_hook.
2. Open WP Crontrol from the WordPress admin menu (Tools > Cron Events), and click “Add New Cron Event”.
3. Configure the event
Hook name: send_inventory_report_hook
Arguments: leave blank unless your function expects them
Next run time: set the first execution time
Schedule: choose an interval (e.g. daily, hourly)
4. Save the event. WP-Cron will trigger the hook on the defined schedule, and your function will run in the background.
The plugin approach is ideal for non-developers who can register the function once and then control its schedule through the WordPress admin interface. You also gain full visibility over timing and behavior through the plugin’s interface.
Scheduling WordPress Cron Jobs in Code
For more flexibility, you can register your own events in code. Here’s a simple example that schedules a daily email:
if ( ! wp_next_scheduled( 'send_daily_email' ) ) {
wp_schedule_event( time(), 'daily', 'send_daily_email' );
}
add_action( 'send_daily_email', 'my_send_email_function' );
function my_send_email_function() {
wp_mail( 'you@example.com', 'Daily Report', 'This is your automated report.' );
}
The code checks if the event is already scheduled and, if not, registers it to run daily. The add_action() function connects the event hook (send_daily_email) to the callback function (my_send_email_function) that sends the email.
For straightforward tasks, you can add the above code to your WordPress theme’s functions.php file.
Avoiding Performance Issues with Custom WP-Cron Jobs
Just as plugin developers can hurt your store’s performance with poorly implemented cron jobs, so can you. Before creating a WordPress cron job, think about whether it is the best way to achieve your WooCommerce automation objective. It may be safer to use an existing plugin, an automation service like Zapier, or the Pressable API.
If you decide to add a scheduled task:
Keep the logic short and efficient — long-running processes can cause timeouts.
Avoid queries or API calls that may fail silently.
Make sure your function doesn’t run if the required data isn’t present.
Use logging or notifications to confirm the job is running as expected.
Custom WP-Cron events can be a powerful way to extend WooCommerce automation without relying solely on third-party plugins. However, improperly configured cron jobs can lead to overlapping executions, duplicated actions, or missed tasks. For complex workflows — such as syncing with external systems or processing bulk data — it’s best to work with a developer on a custom plugin that uses Action Scheduler and implements protections like duplicate event prevention and activation/deactivation hooks.
Using Plugins to Schedule WooCommerce Tasks
The safest way to add custom cron jobs in WooCommerce is with a plugin like WP Crontrol or Advanced Cron Manager. These tools allow you to manage and create scheduled events from the WordPress dashboard.
However, to schedule your own custom task, you need to define the callback function in code and connect it to a hook using add_action(). Here’s a simple example.
Kevin MacGillivray is the Chief Marketing Officer at Pressable, where he’s focused on helping more creators build fast, secure, and successful WordPress sites. He’s driven to grow Pressable’s impact and make it the go-to choice for more businesses. Kevin enjoys making technology feel simple, useful, and inspiring through clear storytelling, creative experiments, and building new ways for the community to connect and thrive.
Kevin lives in Victoria, British Columbia, where you’ll often find him swimming in the ocean, exploring local trails with his dog, Minerva, or embracing the West Coast’s vibrant lifestyle and easy rhythm.
Why you should use paid channels Ho, Ho, Ho! The holiday season is fast approaching, I can already hear the sleigh bells in the distance! The masses are waiting to purchase your products! This is […]
Nowadays, more than half of online shoppers have access to your brand and products in the palm of their hands. The convenience of mobile devices comes with high expectations: when visitors land on your website, […]
WooCommerce is a trusted, secure tool that’s regularly updated and maintained specifically to protect online stores against malicious attacks and hacking. However, like any platform, it’s not immune to security threats like order fraud. Fortunately, […]