Built with Chinaski

Bulk Create

Bulk Create is the admin screen for standing up many pages or posts in one pass — from pasted titles or pasted title+body blocks — as drafts, in one language. Find it under the Create in bulk entry in the admin area.

Two input modes

  • Title list — paste one title per line. Each line becomes an unpublished draft of the chosen type (page or post) in the chosen language.
  • Per-item blocks — separated by a line containing only three dashes; first line of each block is the title, the rest until the next --- is that item’s body. Handy when you paste draft content from a markdown or outline file. If you submit both fields, the per-item input wins, so a stray titles field can’t double-create.

Per-line extras

A line can carry a custom slug after the final comma: My Page, my-page creates the page with slug my-page. The shortcut only applies when the text after the last comma looks like a slug (lowercase letters, digits, hyphens — no spaces), so titles with real commas (“Roofing, Siding & Gutters”) are parsed intact.

Optionally set:

  • Language (from your configured languages).
  • Parent page — pages only; new pages nest under one existing parent, giving you an instant sub-tree (e.g. 12 country pages under /services).
  • Page template — any shipped or theme page template (defaults to page.tt).
  • A shared body template — one body for all items with {{title}} and {{slug}} mail-merge placeholders: every page gets the same design with its own headline and URL swapped in, HTML-escaped on insertion. Per-item bodies (from the per-item mode) replace the shared template for that item.

Limits and guardrails

  • 500 items per run (room deliberately bounded; extra lines are trimmed).
  • Body template ≤500 KB; per-item input ≤1 MB — oversized inputs are rejected with a message.
  • Titles longer than 500 characters are rejected and listed on the result screen.
  • Duplicates are skipped: a title matching an existing item (case-insensitively, within the same language, live records only) is not re-created — the result screen shows what was skipped with its existing ID.
  • Slug collisions resolve as slug-2, slug-3, … up to -100; past that a timestamp keeps the run from wedging.
  • Permission gates apply: your language scope and allowed content types (for editors with restrictions) are checked before anything writes.

What gets created

Drafts. Every created page/post is unpublished with review status draft, attributed to you (visible in the audit trail one line per item), and subject to the usual approval workflow if your editor account doesn’t publish directly.

If the batch fails

Creation is transactional: if anything in the run throws, the whole batch rolls back (“no records were created”) and the server log carries the detail — safe to rerun after adjusting the input.