One-Click Demo Import for WordPress Themes
Quick Demo Importer - one click demo import

Quick Demo Importer Run one click demo import for themes, plugins, media, and content in WordPress.
0.07MB • PHP 8.0+ • WP 6.0+
Quick Demo Importer is made for people who want a finished-looking sample site without repeating the same manual setup on every install. After activation, you open a dedicated tools screen, pick a demo profile, and start a guided run. The plugin can install a theme, add required plugins, place images in the Media Library, import WordPress XML content through the official WordPress Importer, and apply common site settings such as the front page, menus, site icon, and logo. Progress is shown step by step in the admin interface, so you always know what is running and where the process stopped if something needs attention. You can use the bundled starters or add your own profile with JSON when you want a reusable setup for your team or product.
- Simple admin screen for complete one click demo import runs
- Install themes and plugins from wordpress.org or a ZIP URL
- Import sample media and WXR content in the same workflow
- Apply front page, menus, branding, and related options after content lands
- Add custom demo profiles from JSON and reuse them later
Use Cases
- Theme buyers setting up a sample site
Someone installs a new theme and wants the demo layout quickly. With one click demo import, sample pages, supporting plugins, and basic site settings can be applied from one place instead of several disconnected tools. - Agencies creating a standard starting point
Teams that launch many similar sites can keep a shared profile for the base theme, common plugins, and starter content. Each new project begins from the same known baseline. - Product authors packaging onboarding
Theme and plugin authors can ship demo profiles that show real content and recommended add-ons. Users reach a meaningful preview faster, which reduces setup friction and support questions. - Staging checks before production
Developers can run an import on staging to verify exports, media, and reading settings. Issues are caught in a safe environment before any production cutover. - Training and internal demos
Educators and internal teams can rebuild a known sample site for workshops or QA. A repeatable import is more reliable than restoring full site backups for every session.
Key Features
- Clear step-by-step import flow
Each demo runs as an ordered sequence. The interface updates as stages complete, which makes long imports easier to supervise and easier to understand when a stage needs a fix before the rest continues. - Theme installation built into the demo
Profiles can install a theme from the WordPress.org directory or from a remote ZIP package. You can also choose whether the theme should become active immediately or remain installed only. - Plugin installation with activation control
Required plugins can be added during the same run. This is useful for demos that depend on forms, commerce, or editor tools, and it supports leaving a package inactive when activation is not desired yet. - Local media seeding
Demo images stored with a profile can be brought into the Media Library first. That helps site icon, logo, and other image-based settings resolve cleanly after the rest of the content is imported. - Official WXR content import
Pages, posts, and related export data are handled through the official WordPress Importer. The plugin focuses on orchestration so content loading stays aligned with standard WordPress export files. - Post-import site configuration
After content is available, the importer can set reading options, assign menus, apply theme mods, and update selected options. Permalink structure can be refreshed as part of that finishing stage. - Custom profile support
When a bundled starter is not enough, you can provide a profile as JSON. Custom profiles are stored on the site and can be selected later like any other demo entry. - Safer failure handling
If one stage fails, later stages do not continue blindly. That keeps partial imports easier to diagnose and reduces the chance of mixed or confusing end states.
How to Use Quick Demo Importer
- Install and activate the plugin
Upload Quick Demo Importer to your WordPress site and activate it. Then open Tools → Demo Importer to reach the main screen.
- Make sure WordPress Importer is ready
Content import depends on the official WordPress Importer. If it is missing, use the on-screen action to install and activate it before you start a full demo run.
- Choose a bundled demo or add a custom profile
Select one of the included starters, or import a profile JSON if you already prepared your own sequence. Review the listed steps so you know which packages and content will be applied.
- Start the import and wait for each stage
Begin the run and keep the browser tab open while stages complete. Success and error messages appear per step so you can see exactly what finished.
- Review the site and adjust branding
After a successful import, check the front page, menus, and sample content. Replace demo text and images with your own brand assets as needed.
Usage Guide
Quick Demo Importer runs one click demo import from Tools → Demo Importer. You need the manage_options capability. Each demo is a profile: a folder with a required config.json that defines an ordered pipeline of steps. Steps run one by one over AJAX. If a step fails, later steps do not run.
Profile locations
- Bundled:
wp-content/plugins/quick-demo-importer/demos/{slug}/ - Custom:
wp-content/uploads/quick-demo-importer/profiles/{slug}/
When the same slug exists in both places, the custom profile is used first.
Typical files inside a profile folder:
{slug}/
config.json # required
content.xml # optional WXR export
images/ # optional local media
tasks.php # optional PHP tasksconfig.json root fields
name(required) — display titledescription(optional) — short summarypipeline(required) — non-empty array of step objects
Unknown step types are skipped while parsing. If nothing valid remains, the profile is rejected.
Minimal example:
{
"name": "My Demo",
"description": "Theme only",
"pipeline": [
{ "step": "install_theme", "slug": "twentytwentyfour" }
]
}Pipeline steps for one click demo import
Every item needs "step": "<type>" plus type-specific fields. Array order is execution order. Use this structure when you want reliable WordPress demo import that installs packages, media, and content in one flow.
1. install_theme
Installs a theme. Activation defaults to on.
slug— theme stylesheet / wordpress.org slugzip_url— HTTPS ZIP URL (optional alternative or complement to slug)activate— defaulttrue; setfalseto install only
Provide at least slug or zip_url.
{ "step": "install_theme", "slug": "twentytwentythree" }
{
"step": "install_theme",
"slug": "my-theme",
"zip_url": "https://example.com/my-theme.zip",
"activate": true
}- Already installed +
activate: true→ switches theme when needed - Already installed +
activate: false→ left as-is (not force-deactivated)
2. install_plugin
Installs a plugin. Activation defaults to on.
slug— plugin folder / wordpress.org slugzip_url— HTTPS ZIP URLactivate— defaulttrue; setfalseto install only
{ "step": "install_plugin", "slug": "classic-editor" }
{
"step": "install_plugin",
"slug": "hello-dolly",
"activate": false
}
{
"step": "install_plugin",
"slug": "debug-bar",
"zip_url": "https://downloads.wordpress.org/plugin/debug-bar.latest-stable.zip"
}When zip_url is set, that archive is used and the wordpress.org API is skipped. Keep slug aligned with the installed folder name so activation can resolve the plugin file.
3. import_media
Imports image files from a profile subdirectory into the Media Library.
directory— default"images"
Allowed extensions: jpg, jpeg, png, gif, webp, ico.
{ "step": "import_media", "directory": "images" }- Attachment
post_name= sanitized file name without extension - Existing slug → skipped (safe to re-run)
- Reuse those slugs later in
site_icon,custom_logo, ortheme_mods_attachments
4. import_content
Imports WXR/XML through the official WordPress Importer (WP_Import). This is the standard path for WordPress XML import and exported demo content.
content_url— remote HTTPS WXR URL (used when non-empty)content_file— relative file under the profile (defaultcontent.xml)fetch_attachments— defaulttruerewrite_urls— defaulttrue
{
"step": "import_content",
"content_file": "content.xml",
"fetch_attachments": true,
"rewrite_urls": true
}
{
"step": "import_content",
"content_url": "https://example.com/exports/demo.xml",
"fetch_attachments": true,
"rewrite_urls": true
}WordPress Importer must be active. The Demo Importer screen can install it when needed.
5. apply_setup
Applies generic site configuration. Put demo-specific logic in run_task instead.
Reading / front page
show_on_front—pageorpostspage_on_front/page_for_posts— page slug or title
Branding
site_icon— attachment slugcustom_logo— attachment slug
Menus
menus— object map:{ "location_slug": "Menu Name" }
Theme mods
theme_mods— scalar valuestheme_mods_attachments— theme mod key → attachment slug → stored as URL
Options
options— WordPress options object (scalars)permalink_structureinsideoptionsupdates structure and flushes rewrite rules
{
"step": "apply_setup",
"show_on_front": "page",
"page_on_front": "welcome",
"page_for_posts": "notes",
"site_icon": "demo-three-icon",
"custom_logo": "demo-three-logo",
"menus": { "primary": "Main Menu" },
"theme_mods": { "my_setting": "value" },
"theme_mods_attachments": { "hero_image": "hero-banner" },
"options": {
"blogname": "Demo Site",
"permalink_structure": "/%postname%/",
"posts_per_page": 5
}
}6. run_task
Runs a method from the profile tasks.php class.
name(required) — method nametasks_class(optional) — must start withQDIMP_Tasks_
{ "step": "run_task", "name": "setup_primary_menu" }
{
"step": "run_task",
"name": "pin_welcome_note",
"tasks_class": "QDIMP_Tasks_demo_three"
}Example class shape:
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class QDIMP_Tasks_my_demo {
public function my_method() {
return 'Done.';
}
}Class resolution: step tasks_class → QDIMP_Tasks_{demo_slug} → first loaded QDIMP_Tasks_* class that has the method. Custom profiles imported in the UI strip all run_task steps for security.
Full pipeline example
{
"name": "Starter Shop",
"description": "Theme, WooCommerce, media, content, setup, menu task",
"pipeline": [
{ "step": "install_theme", "slug": "twentytwentyfour" },
{ "step": "install_plugin", "slug": "woocommerce" },
{ "step": "import_media", "directory": "images" },
{
"step": "import_content",
"content_file": "content.xml",
"fetch_attachments": true,
"rewrite_urls": true
},
{
"step": "apply_setup",
"show_on_front": "page",
"page_on_front": "home",
"page_for_posts": "blog",
"site_icon": "site-icon",
"options": {
"blogname": "Starter Shop",
"permalink_structure": "/%postname%/"
}
},
{ "step": "run_task", "name": "setup_primary_menu" }
]
}Admin workflows
Run a bundled demo
- Open Tools → Demo Importer
- Ensure WordPress Importer is ready
- Select a demo, review steps, start import
Import a custom profile
- Paste full
config.jsonor choose a local.jsonfile (read in the browser) - Import profile
- Select the new Custom entry and run it
- JSON size limit about 512 KB
- Only known step types are kept
run_tasksteps are removed on custom import- Profiles are stored under uploads and can be deleted in the UI
Practical tips
- Order matters: install theme/plugins before dependent content; run
import_mediabeforeapply_setupwhen you reference image slugs. - Re-runs: installed themes/plugins are not reinstalled blindly; existing media slugs are skipped; task methods should tolerate a second run.
- Pretty permalinks: set
permalink_structureunderapply_setup→optionsso rewrite rules refresh (important on nginx). - Keep setup generic: one-off cleanup or menu rebuilds belong in
tasks.php. - Omit empty keys: do not add
"zip_url": ""; leave the field out when unused.
Errors and security
Each step returns a success message or an error. The UI shows the message and stops the pipeline. Common causes include a missing page slug in apply_setup, inactive WordPress Importer, invalid ZIP URL, missing images/ folder, or a missing task method.
- Only administrators can run imports
- Remote URLs must be valid
http/httpstargets - Path traversal is blocked for content and media paths
- Do not ship arbitrary PHP through custom profile import; use bundled
tasks.phponly for trusted demos
With a well-ordered profile, one click demo import becomes a repeatable way to deliver WordPress demo import results: packages, media, WXR content, and finishing site options in one controlled pass.
Technical Details
| Version | 1.0.0 |
| PHP | 8.0+ |
| WordPress | 6.0+ |
| Dependencies | Official WordPress Importer for WXR/XML content steps |
| Method | Admin AJAX pipeline that runs profile-defined stages in order |
| Output | Installed packages, Media Library items, imported content, and updated site settings in wp-admin |
FAQ
Who is Quick Demo Importer for?
It is for theme users, agencies, and product authors who want a practical way to load sample sites in WordPress without repeating manual setup every time.
Does this replace the WordPress Importer plugin?
No. WXR content still goes through the official WordPress Importer. Quick Demo Importer coordinates the wider process around it.
Can I install a plugin without activating it?
Yes. A profile step can install a package and leave it inactive when that is the intended behavior.
Can themes or plugins come from a ZIP link?
Yes. When a secure ZIP URL is provided, that package source is used instead of the wordpress.org download API.
What is a custom profile?
A custom profile is a JSON description of the import sequence. You can add it from the admin screen and run it like a bundled demo.
What happens if one step fails?
The process stops at the failed step and shows the error. Remaining steps are not executed until you resolve the issue and run again as needed.
Will this overwrite my whole existing site?
Imports add or update content according to the selected profile and WordPress import behavior. Always use a backup or staging site when you are unsure about the current content.
Changelog
- 1.0.0 – 2026-10-07
Initial release with staged demo runs, theme and plugin installation, media seeding, WXR content import, site setup helpers, custom profiles, and admin progress feedback.
Download Quick Demo Importer and start one click demo import from Tools → Demo Importer.
Download NowWhether you are testing a theme or preparing a client baseline, one click demo import keeps the path from empty site to working sample clear and controlled.
One click demo import is often the difference between a blank dashboard and a site that already feels usable. Quick Demo Importer is built for that moment: it helps you load sample layouts, related plugins, media, and exported content through a single admin workflow that stays easy to follow.