Choose the method that matches your source and technical access: use WP-CLI for repeatable server-side scripts, the authenticated WordPress REST API when another application must create content over HTTP, or a CSV/XML importer plugin when editors need spreadsheet-based mapping in the WordPress dashboard. Whichever route you use, map the content type explicitly as post or page, then test a few records as drafts before running the full batch.
Choose the right bulk-creation method
| Method | Best for | Source formats | Access and skills | Strengths | Watch-outs |
|---|---|---|---|---|---|
| WP-CLI | Repeatable jobs, deployment scripts, migrations and multisite operations | CSV, JSON or any format your shell/PHP script can read | Server or SSH access and command-line knowledge | Deterministic fields, scripting, logging and easy reruns | Requires server access and your own validation, retry and duplicate logic |
| REST API | An external application, spreadsheet service or editorial system is the source of truth | JSON over HTTP | Application development, authentication and API operations | Integrates cleanly with other systems and separates content production from WordPress | You must handle permissions, rate limits, retries, idempotency and duplicate detection |
| CSV/XML importer plugin | Editors who want visual field mapping rather than code | CSV, XML, Excel or Google Sheets, depending on the plugin | Dashboard administrator access | Visual mapping for posts, pages, media, taxonomies, custom fields and many plugin fields | Features, limits, licensing and scheduling can change; verify current documentation |
Prepare the data before importing
Create one source row or object per item. A practical minimum schema is:
post_type: exactlypostorpagepost_titleand, when needed, a fixedpost_name(slug)post_content, including valid blocks or shortcodes you intend to usepost_status, normallydraftfor the first runpost_authorand publication dates where applicable- Category and tag terms for posts, or other taxonomy terms used by your site
- Featured-image source and any required media metadata
- For pages,
post_parent,menu_orderand a pagetemplatewhen your theme uses them - Custom fields, SEO fields or plugin-specific metadata that must survive the import
Normalize dates, IDs and slugs before loading. Keep a stable source ID so a rerun can update the same WordPress item instead of creating a duplicate. Check for duplicate titles, slugs, source IDs and image URLs before scaling up.
Method 1: Bulk-create with WP-CLI
WP-CLI makes WordPress administration scriptable. Its wp post command includes create, update, list and generate subcommands. The command accepts the title, content, status, author, dates, taxonomies, metadata and post type, including page.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →#1 Best Overall
Create a single post or page
wp post create --post_type=post --post_title="Example post" --post_content="<p>Body</p>" --post_status=draft --porcelain
wp post create --post_type=page --post_title="Example page" --post_content="<p>Body</p>" --post_status=draft --porcelain
--porcelain prints the new ID, which is useful for logging. Add the other supported fields to the command or pass them from your script. For pages with hierarchy, supply the parent ID and menu order after you have resolved the parent records.
Loop over CSV or JSON rows
Use a shell, PHP or another server-side script to read each row, validate required fields, escape shell arguments safely and call wp post create. Write the source ID, returned WordPress ID, slug and error output to a log. Abort or quarantine invalid rows rather than silently creating partial content.
Update or audit the batch
Use wp post list with an explicit --post_type to inspect the result. You can pass IDs from a list into wp post update for controlled corrections, such as changing a status after editorial review. Keep the original source file and log with the run so a later update is reproducible.
Rank #2
Method 2: Create content through the REST API
The authenticated WordPress REST API has separate resources for posts and pages, as well as media, taxonomies, users, revisions and other objects. Send a POST request to /wp/v2/posts for posts or /wp/v2/pages for pages.
Recommended Free Tools
Post request shape
POST /wp-json/wp/v2/posts
{
"title": "Example post",
"content": "<p>Body</p>",
"status": "draft",
"slug": "example-post",
"author": 12,
"categories": [4],
"tags": [9],
"featured_media": 321,
"meta": {"source_id": "A-1001"}
}
Posts support fields such as title, content, slug, status, author, excerpt, featured media, categories, tags and exposed meta. For a page, use the pages endpoint and add the page-specific fields:
POST /wp-json/wp/v2/pages
{
"title": "About the company",
"content": "<p>About us</p>",
"status": "draft",
"parent": 0,
"menu_order": 10,
"template": "templates/about.php",
"featured_media": 321
}
The exact template value must be registered by the active theme. Resolve parent IDs before creating child pages, or create the hierarchy in a second pass.
Rank #3
Make the integration safe to rerun
- Authenticate with an account permitted to create the requested post type and taxonomies.
- Store the returned WordPress ID, slug and link alongside your source ID.
- Before creating, look up the source ID or a collision-resistant slug and update the existing item when appropriate.
- Implement backoff for rate-limit and transient server errors, and record non-retryable validation errors separately.
- Upload media first, capture each attachment ID, then reference it as
featured_mediaor in content.
Leave imported records as drafts until response IDs, links, slugs, media and rendered content have been checked.
Method 3: Use a CSV or XML importer plugin
Dashboard importers are suitable when an editor owns a spreadsheet, XML feed or Google Sheet and does not want to maintain code. Products such as WP All Import document imports from XML, CSV, Excel and Google Sheets into posts, pages, custom post types, media, taxonomies, custom fields and theme or plugin fields. WP Ultimate CSV Importer documents CSV, XML and Excel imports for posts, pages, custom post types, users, media, taxonomies, custom fields and ACF fields, including external image URLs.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Typical dashboard workflow
- Install and configure the importer, then make a backup and preferably work on staging.
- Upload or connect the source file.
- Select the destination post type:
PostorPage, not a similarly named custom type. - Map title, slug, body, status, author, dates, taxonomies, media and custom fields.
- Map page parent, menu order and template when those fields are required.
- Run two or three rows as drafts and inspect the created content.
- Run the complete import with logging enabled, then verify links, media and taxonomy assignments.
Importer interfaces and capabilities vary by product and version. Check the current plugin documentation for scheduling, update-versus-create behavior, image-download rules, field support and any record limits before committing to a large run.
Rank #4
- Laminated, durable tabs designed specifically for the Plain Language Big Book: A Tool for Reading Alcoholics Anonymous (Book not Included): These tabs are specially crafted for the Alcoholics Anonymous Plain Language Big Book, featuring 3 mil film lamination for exceptional durability. They are suitable for regular use with the PL book of Alcoholics Anonymous, ensuring they withstand frequent page turns
- Easy and precise placement with our alignment card: Each set comes with an alignment card to simplify organizing your Plain Language AA Big Book. Pre-numbered tabs with page numbers and locations save time and ensure consistent positioning, making navigating the big book for AA effortless
- Repositionable adhesive for damage-free use: Unlike traditional sticky tabs, these repositionable tabs let you adjust their placement without tearing pages. They're a clean, reliable solution for customizing the AA book, staying secure once folded
- Customizable blank tabs for personalized sections: Add unique categories or highlight important notes in your Alcoholics Anonymous book with the included blank tabs. This allows you to personalize the plain language big book to suit your recovery journey
- Color-coded tabs for easy navigation: Includes bright, color-coded tabs with large, clear fonts, simplifying the process of locating chapters and key sections in the Plain Language AA Big Book. Save time while enhancing your focus on Alcoholics Anonymous Big Book recovery insights
A safe bulk-import workflow
- Back up and stage. Take a restorable database and media backup. If possible, clone the site to staging and test there first.
- Define the contract. Document every source column, allowed status, author mapping, taxonomy rule, media source and page-parent relationship.
- Run a tiny draft batch. Two or three records expose mapping errors without filling the site with bad content.
- Render and inspect. Check titles, slugs, blocks or shortcodes, internal links, hierarchy, menu order, taxonomies, featured images and custom or SEO fields.
- Check uniqueness. Compare source IDs, titles, slugs and media against existing WordPress data before the full run.
- Execute with observability. Keep a per-record success/error log, capture returned IDs and retain the exact input file used.
- Retry deliberately. Retry transient database or HTTP failures, but route validation and permission errors to a correction queue so reruns do not duplicate successful records.
- Publish only after review. Confirm canonical URLs, sitemap visibility, navigation, redirects and editorial approval before changing drafts to published status.
Common problems and fixes
Posts were created as pages, or vice versa
Check the explicit post_type value, REST endpoint and importer destination. Do not infer type from a title or spreadsheet tab name.
Duplicate records appear after a rerun
Add a stable source ID in post meta or an equivalent importer key. Search that key before create, and keep a log mapping it to the WordPress ID.
Child pages are at the top level
The parent did not resolve to a valid page ID at creation time. Create parents first, then update or create children with the resolved parent value.
Free tools Windows power users keep installed
One-click scans. No signup required.
Best Value
Images are missing
Verify that the process can fetch or upload the source URL, that the attachment was created, and that the resulting media ID is assigned to the featured-image field. Review timeouts and blocked remote hosts.
Content looks different after import
Inspect the stored HTML, block markup and shortcodes. Confirm the active theme and required plugins are present on the target site, then test a representative record in the front end.
The batch stops partway through
Use the log to identify the last confirmed source ID. Correct the failing rows, then rerun only unprocessed or failed records using your duplicate guard.
Which option should you use?
- Choose WP-CLI when you control the server and need a repeatable, reviewable script or migration.
- Choose the REST API when another system must remain the source of truth and communicate over HTTP.
- Choose an importer plugin when nontechnical editors need visual mapping from CSV, XML, Excel or a sheet.
For mixed projects, combine them: use an importer for editorial mapping, the REST API for an upstream application, or WP-CLI for a final deployment and audit pass. Keep the same source-ID, draft-first and verification rules regardless of the transport.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

