You are the one who gets paged when a bulk job locks the database at 2am. So the generation layer needs to be queue-based, idempotent and inspectable.
Default 200 rows per worker tick, tuned to your host.
Re-running a batch does not duplicate posts.
Row, field, schema and post-array filters.
Generation, dry run and rollback are all scriptable.
Modelled at current defaults: 12,400 indexed URLs → 446 signups per month.
Developers judge a publishing plugin by three things: what it does to the database, what it exposes to extend, and whether it fails safely. WpBulkPublishing runs generation through batched queue workers, writes with idempotent job keys, exposes filters at every transformation point and ships a REST namespace so you can drive the whole thing from CI instead of the admin UI.
Bulk plugins that write 40,000 rows in one request and take the site down.
No hooks where you need them, so every customisation becomes a fork.
Generated content that cannot be reproduced, diffed or rolled back.
Jobs are chunked, resumable and idempotent. A failed batch retries from its last checkpoint rather than restarting the whole run.
Filters on the data row, the rendered field, the schema object and the final post array — so you extend rather than fork.
A REST namespace and WP-CLI commands mean generation can run from a pipeline with the diff posted back to the PR.
Indexed lookup tables, no unbounded postmeta sprawl, and a documented cleanup path when a family is retired.
wp-env or Docker setup matching production PHP, MySQL and object-cache versions, so a generation run behaves the same locally.
Reproducible dev environment + seed data.
The full extension surface: REST namespace, WP-CLI commands and the filter list with firing order.
OpenPatterns for building your own add-ons on top of the generation engine without forking it.
OpenCopy-paste snippets for the twenty things developers actually ask for in the first week.
OpenThese are patterns, not a keyword list. Each one multiplies against the entities in your own dataset — which is where a 20,000-URL first batch comes from.
Not yet. Fix the unchecked items first; publishing now would create pages we would later consolidate.
Developer-led builds where the data pipeline is owned in-house and generation runs from CI. Indexation is held at a conservative 62%.
A model, not a forecast. Move the sliders to your own conversion economics — we will run the same maths against your data on the call.
| Dimension | The usual approach | With WpBulkPublishing |
|---|---|---|
| Generation | One long HTTP request | Chunked queue workers with checkpoints |
| Customisation | Fork the plugin | Filters at row, field, schema and post level |
| Storage | Unbounded postmeta | Indexed lookup tables with a teardown path |
| Automation | Admin clicks | REST namespace and WP-CLI in CI |
We look at what wordpress developers already hold — systems, exports, APIs — and score each axis for demand and defensibility.
The data contract is written and the first template is designed against real rows, not placeholders.
3,000–7,000 URLs published with schema, internal links, sitemap entries and IndexNow.
Indexation and impression data decides what widens and what gets cut. Templates, gates and runbook transfer to you.
Yes — source is readable on the install, the REST surface is documented, and every hook is listed with its arguments and firing order.
Each role gets its own data reality, its own template families and its own definition of a good outcome. Pick the seat you sit in.
We audit your data, size the first batch, model the economics and tell you honestly when programmatic is the wrong tool for the job.