Running and scheduling tasks
6 min read
A task never makes a visitor or an editor wait. Generating pages is a background task: it runs in small batches through Action Scheduler, the same engine that WooCommerce uses. The general mechanics (queue runners, WP-Cron, retries, the watchdog) are described in Background tasks; this page covers what is specific to page generation.
Starting a run
How | Result |
|---|---|
Save and generate pages / Save and run now in the task editor | Saves, then starts a run |
Run now on the task card | Starts a run with the saved settings (the card changes to Pause and the badge to Generating) |
A schedule or a data change (see below) | Starts a run by itself |
Quick start | Starts a capped run (see Quick start) |
The message "Generation started. Pages appear as they are created." confirms it. Pause stops the task ("Task paused."); a batch that is already running finishes first. A paused task never runs, not even when its data changes, until you click Run now again.
If your site has little traffic or WP-Cron is disabled, jobs wait until something triggers the queue. A run started from the admin asks Action Scheduler to start right away; otherwise see the system cron advice in Background tasks and WP-CLI.
What a run does
- Generate: the task walks through the rows (after filters) in order, in batches. Each batch works for about 20 seconds (or until 80 % of PHP's memory limit) and then queues the next one. The number of rows per batch is Rows per batch (default 200); with several languages the rows are divided between the languages.
- Finish: pages whose rows were not seen in this run are marked removed (this is how deleted rows leave the site).
- The run summary is stored, caches are cleared, AI starts if you asked for it after each run.
Each run is idempotent and resumable: a crash or a restart continues where it stopped and never creates a page twice. The task keeps a log of its last 20 runs.
Run counters
The card and the log show, per run:
Counter | Meaning |
|---|---|
created | New pages |
updated | Pages whose title, URL or data fingerprint changed |
unchanged | Pages checked and left alone (their last modified date does not move) |
removed | Pages whose row is gone or no longer matches the filters |
conflicts | Rows that got no page because another generated page already uses the URL |
shadowed | Pages that are not shown because real WordPress content uses their URL |
limited | Pages not created or restored because of the page limit or the daily limit |
Example: "Last run 3 minutes ago: 2 created, 3 updated, 0 removed."
Scheduling (Business)
Step Sync and limits › Keep pages in sync:
Option | Behaviour |
|---|---|
Run once | The task runs, finishes and shows Up to date. Run it again by hand. |
Every hour, Every 6 hours, Daily, Weekly | After a run finishes the next one is queued that long afterwards. New rows get pages, changed rows update theirs, deleted rows are removed. The badge shows Scheduled between runs. |
"Automatic sync is part of the Business plan. You can always run a task again by hand." On other plans the list is disabled and saving a task with a schedule is refused ("Scheduled sync is available on the Business plan and above."). The REST API accepts any interval from 15 minutes to a year; the editor offers the five presets.
A recurring task waits at least one minute between runs. If the license ends, scheduled runs stop (see Limits and plans).
Update pages when the data changes
The toggle Update pages when the data changes (on by default, every plan): "Runs the task after an import or data feed sync of its source, so new, changed and deleted rows reach the pages, sitemaps and caches right away."
Change in a data table | What happens |
|---|---|
A CSV import or a feed sync that changed rows | The task runs |
A row added (form, admin, API) | The task runs |
Rows deleted, or the table emptied | The task runs |
A row edited in a row-mode task | Its page is rebuilt at once, no run is needed |
A row edited in a combination task | The task runs |
A change while the task is running | The run finishes, then runs again about a minute later |
Exceptions: a paused task never runs from a data change; tasks that read a field group table are not triggered at all (use a schedule or Run now). Imports and feeds that match rows by a unique column keep the row IDs stable, so pages are updated instead of removed and recreated; without a unique match column an import keeps IDs by row position. Turn the toggle off when you want to control runs yourself.
New pages per day
New pages per day ("Optional. Publishing gradually looks more natural to search engines. Empty = no limit.") caps how many new pages a task creates per day. The day starts at midnight UTC. When the cap is reached the run finishes with the notice "Daily page limit reached. New pages follow tomorrow.", the badge shows Waiting and the next run is queued for just after midnight UTC. Updates and removals are never limited; pages created today are counted per task.
Example: with a cap of 1 and four pages already created today, a run with new rows creates nothing and counts the pages it had to hold back as limited.
Rows per batch
Under Advanced settings: "Lower it on slow hosting; batches also stop after about 20 seconds." Range 10 to 1,000, default 200. A smaller batch means more, shorter jobs.
Messages and stops
A run can stop with a notice; the card shows Waiting and the message:
Notice | Why | What to do |
|---|---|---|
"Daily page limit reached. New pages follow tomorrow." | New pages per day | Nothing, or raise the cap |
"Your plan’s page limit is reached. Existing pages stay in sync; upgrade to generate more pages." | Plan limit | Hide or delete pages, or upgrade; see Limits and plans |
"%d page is not shown because WordPress content already uses its URL." | Shadowed pages | See Serving pages |
"The first pages are ready. Run the task to generate the rest." | The quick start's 10-page cap | Click Run now |
"The page template no longer exists. Choose another one." | Template deleted or trashed | Edit the task |
"The data source "…" does not exist." | Source deleted | Edit the task; existing pages stay |
"Page generation needs an active license." | License ended | Renew; pages keep serving during the grace period |
"Pages in several languages need the Business plan. Existing pages keep working." | Plan changed | Turn the languages off or upgrade |
"The task creates pages in several languages, but neither WPML nor Polylang is active. Existing pages keep working; generation continues once the plugin is back." | Multilingual plugin missing | Activate it |
A stop never removes pages: when a source, template or plugin is missing the run pauses before the clean-up step.
If a batch throws an error the task retries after 1, then 2 minutes and becomes Failed after the third failure in a row (see Background tasks); Run now resets it.
Editing a running task
You can save a task while it runs. If the saved settings change which sources it reads, its pages are deleted and generated again; otherwise the run continues with the new settings from the next batch.
Still stuck? Contact support