Marketing channels expect your product feed to stay current — prices, stock levels, and new products should refresh on their own, not every time you remember to click a button. CTX Feed does this with automatic feed updates: on a schedule you choose, it rebuilds each feed in the background so the file your channels download always matches your live catalog. That schedule is driven by WordPress cron. This guide explains how auto-update works, how to turn it on per feed, and — most importantly — how to make sure cron actually fires on time, especially on low-traffic sites.
How auto-update works in CTX Feed
Every feed has an update interval and an Auto Update switch. When Auto Update is on, CTX Feed registers a recurring background job (through WooCommerce’s Action Scheduler) that regenerates the feed file each interval. Action Scheduler, in turn, only runs when WordPress cron ticks. So the chain is:
WordPress cron fires → Action Scheduler runs due jobs → CTX Feed regenerates the feed.
The important thing to understand about WordPress cron (WP-Cron) is that it is not a real system clock. It runs when someone visits your site. On a busy store, visits are frequent enough that scheduled jobs fire close to their due time. On a quiet store with few visitors, cron can fall behind — feeds quietly miss their scheduled refresh and the Last Generated column on Manage Feeds drifts past the interval you chose. The fix is to give WordPress a reliable heartbeat with a real server cron, covered below.
Step 1: Set the update interval when you build the feed
You choose how often a feed refreshes on the Make Feed screen:
- Open CTX Feed and choose Make feed under Feeds (or edit an existing feed from Manage feeds).
- In the Feed settings card, find Update interval.
- Pick one of: Every 1 Hour, Every 6 Hours, Every 12 Hours, Every 24 Hours, or Every Week. With CTX Feed Pro the list also unlocks the sub-hour intervals — Every 5, 15, 30, and 45 Minutes (they apply only while Pro is active; if Pro is deactivated, a feed saved with one falls back to its saved hourly interval, or to every 24 hours).
- Save the feed.

Match the interval to how often your catalog really changes. A store with frequent price and stock swings benefits from every 1–6 hours; a stable catalog is fine on 24 hours or weekly. More frequent runs mean more server work, so do not schedule tighter than you need.
A word on the sub-hour Pro intervals. CTX Feed Pro‘s 5- and 15-minute intervals are there for genuinely fast-moving catalogs, but they are usually not recommended — and the plugin itself asks you to confirm before accepting them:
- On bigger stores, building a feed can take longer than 5–15 minutes. When a build is still running at the next due time, that update is skipped and not retried until the next interval — so updates may actually arrive slower, not faster. CTX Feed also builds one feed at a time: a second feed that falls due waits and retries every minute until the first one finishes.
- Your server never gets a break: rebuilding feeds around the clock can make the whole store feel slower, especially on shared hosting.
- Sales channels read your feed on their own schedule — Google usually once a day, Facebook about once an hour — so updating faster than that rarely helps.
For most stores, every 30 minutes or longer is the sweet spot.
Step 2: Turn on Auto Update for the feed
- Go to CTX Feed → Manage Feeds.
- Find your feed in the list and flip its Auto Update toggle on.
- The Schedule column now shows the interval in short form — 24h for every 24 hours, 6h, 1w, and so on. With Auto Update off, the feed reads Manual and rebuilds solely when you click Regenerate; switching it off also cancels any queued or running batches for that feed.

- Auto Update toggle — on means CTX Feed rebuilds this feed on its schedule.
- Schedule column — the feed’s interval in short form (here 24h); Manual when Auto Update is off.
That is all CTX Feed needs from you. Whether the schedule actually runs on time now depends on WordPress cron.
Step 3: Make WordPress cron reliable (recommended)
If your feeds refresh on schedule, you are done. If they fall behind their interval, or only update when you visit the admin, replace the visitor-triggered WP-Cron with a real server cron. This is the single most effective fix.
1. Disable the default WP-Cron so it does not double-run. Add this line to your site’s wp-config.php, above the /* That's all, stop editing! */ comment:
define( 'DISABLE_WP_CRON', true );
2. Add a real cron job that pings WordPress on a fixed schedule. In your hosting control panel (cPanel → Cron Jobs, Plesk → Scheduled Tasks) or in the server’s crontab, add a job that requests wp-cron.php every 5–15 minutes. A common every-5-minutes entry looks like:
*/5 * * * * wget -q -O - https://yourstore.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Replace yourstore.com with your domain. Use curl instead of wget if your host prefers it:
*/5 * * * * curl -s https://yourstore.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
With this in place, WordPress cron ticks on a dependable clock, Action Scheduler picks up any due feed jobs, and your feeds regenerate on time regardless of traffic. The cron interval (say, every 5 minutes) is just the heartbeat — CTX Feed still only rebuilds a feed when its own interval is due.
Windows servers use Task Scheduler instead of crontab. Create a Basic Task that repeats every 5 minutes and runs:
powershell "Invoke-WebRequest https://yourstore.com/wp-cron.php?doing_wp_cron"
No server access? An external cron service (for example EasyCron or cron-job.org) can request the same https://yourstore.com/wp-cron.php?doing_wp_cron URL every 5 minutes.
Managed hosts: Many managed WordPress hosts (Kinsta, WP Engine, Cloudways, SiteGround, and others) already run a real server cron for you and often ask you to add the
DISABLE_WP_CRONline. Check your host’s docs — if they run system cron, you only need step 1.
Step 4: Confirm cron is running
To verify the schedule is healthy:
- On the Manage Feeds screen, watch the Last Generated column. After a scheduled run it should update to “a few minutes/hours ago” in line with the interval. (In the status filter, Ready means the feed is on a schedule; Not scheduled means its Auto Update is off.)
- Run it on demand to prove the pipeline works end to end: click Regenerate on the feed. If a manual regenerate produces a fresh file but scheduled runs do not, the problem is cron timing — apply Step 3.
- Check System → System status in the CTX Feed menu. “WP-Cron is disabled” is an information line shown whenever
DISABLE_WP_CRONis set — expected if you run a server cron, a problem if you do not. “Automatic feed updates are not running” appears when WP-Cron is disabled and a CTX Feed job is more than five minutes overdue, which means no server cron is picking jobs up. - Look for a red “Not scheduled” badge in the Schedule column. It means Auto Update is on but no next run is registered. CTX Feed re-registers missing schedules on its own; if the badge stays, re-save the feed.
- Inspect scheduled jobs with a tool like the free WP Crontrol plugin, which lists WordPress cron events and lets you run them manually to test.
Troubleshooting
- Last Generated keeps falling behind the interval. Scheduled runs are being missed. Regenerate the feed to catch up, then set up a real server cron (Step 3) so future runs fire on time.
- Feeds only update when I open the WordPress admin. Classic low-traffic WP-Cron behavior — and CTX Feed leans into it: while the Manage Feeds page is open it actively pushes a stuck generation along, which is why things “work when you watch.” Add a server cron so runs also fire when nobody is logged in.
- Nothing updates automatically at all. Confirm the feed’s Auto Update toggle is on — a feed with Auto Update on but no interval picked simply defaults to every 24 hours, so the interval is never the blocker. Then confirm WordPress cron is firing (Step 4).
- My host has
DISABLE_WP_CRONset but no server cron. That combination stops all scheduling. Either add a server cron (Step 3) or remove the define so visitor-triggered cron resumes. - The generation console says “Generation stalled”. A batch has been waiting with no progress for about 90 seconds and no background job is running it — WordPress cron is not firing. Apply Step 3.
- Cron works but a large feed never finishes. Very large catalogs build in batches; each batch needs a cron tick to advance. A 5-minute server cron keeps batches moving. On hosts where loopback requests are blocked, ask your host to enable them or run the server cron above.
Related guides
- Manage Feeds
- How to create a WooCommerce product feed
- How to enable debug mode and download logs
- Introduction to CTX Feed plugin settings
