Skip to main content

Release notes

Changelog

All notable changes to SeedPress are documented here. SeedPress follows Semantic Versioning .

v1.4.2

July 2026 Security & accessibility
security
  • User roles restricted to editable roles — seed users can only receive roles the current admin may assign (get_editable_roles()). The Users tab no longer lists every role on the site; the API and CLI enforce the same allowlist.
  • Job permissions fixed — get / tick / cancel authorize against the stored job type (and require manage_options), not a client-supplied type that defaulted to post.
  • Recipes require Pro server-side — create, run, and delete recipe REST routes enforce a valid Pro license. Step quantities are capped (max 10,000; free-tier limits retained as defence in depth). Pro-only step types cannot be run without a license.
fixed
  • True per-job rollback — jobs now record created item IDs. Rollback deletes only those IDs (still flagged as SeedPress-generated), not every seeded item of that type. Jobs started before this release have no tracked IDs and cannot use per-job rollback; use Cleanup for type-wide deletion.
  • Empty user-role selection no longer hits an invalid array_rand() path; SeedPress falls back to safe default roles.
changed
  • ProGate — locked features no longer keep interactive controls in the DOM under aria-hidden. Free users see a static upgrade card only.
  • Tabs — full keyboard pattern (arrow keys, Home/End, roving tabindex); emoji removed from tab labels for clearer screen-reader output.
  • Destructive actions — Cleanup, job rollback, and recipe delete use confirmation modals. Cleanup progress announces via a live region; recipe progress bars expose proper progressbar ARIA.
  • Animations respect prefers-reduced-motion.

v1.4.1

June 2026 Multisite & license fixes
fixed
  • User cleanup safe on WordPress Multisite — cleanup and uninstall now use remove_user_from_blog() scoped to the current site instead of wp_delete_user(). Users with no remaining blog memberships are fully removed from the network via wpmu_delete_user().
  • License activation failing when site title is under 3 characters — LemonSqueezy requires the instance name to be at least 3 characters. SeedPress now falls back to the site URL when the site title is too short.

v1.4.0

June 2026 WooCommerce orders, FluentCart & FluentCRM
added
  • FluentCart product generation — creates products in the correct fluent-products post type with rows in wp_fct_product_details and wp_fct_product_variations. All image providers are supported; falls back to Picsum automatically when no seeded attachments exist, with a live guardrail notice in the tab.
  • FluentCart order generation — inserts fully-formed orders across all seven FC statuses (completed, processing, pending, on-hold, failed, refunded, partial-refund) with realistic weighting. Each order gets line items linked to seeded products, a billing address, and charge/refund transactions. Dates are spread across the past year so analytics dashboards show real-looking charts from day one.
  • FluentCRM tags & lists auto-assignment — generated contacts are automatically assigned a random selection of whatever tags (0–3) and lists (0–2) already exist in FluentCRM. No configuration required.
  • WooCommerce order generation — seed orders across all seven WC statuses (completed, processing, pending, on-hold, cancelled, failed, refunded) with realistic weighting. Line items are drawn from seeded products, with an automatic fallback to any published product. Fully compatible with HPOS.
  • Batched cleanup for all types — deleting large sets (10,000+ items) no longer crashes with a JSON error. The cleanup endpoint now returns {deleted, remaining} and the UI loops in batches of 500 until everything is gone, with a live "X removed so far" counter.
  • WooCommerce orders, FluentCart products, FluentCart orders, and FluentCRM contacts added to the Cleanup tab with individual counts and delete options.
  • License key via wp-config.php constant — define SEEDPRESS_LICENSE_KEY in wp-config.php for server-managed or multi-environment deployments. The License tab switches to a read-only display and the key cannot be overwritten through the UI.
  • Rich block content in Portfolio recipe — pages generated by the Portfolio preset now use full Gutenberg block markup: headings, lists, pull quotes, separators, and inline Picsum images, instead of plain paragraphs.
fixed
  • FluentCRM generation failing — the generator was calling Faker methods that do not exist in SeedPress's bundled Faker (domainName(), phoneNumber(), streetAddress(), city(), stateAbbr(), postcode()). All replaced with inline alternatives.
  • FluentCRM bulk deletion timing out — deletion previously loaded and deleted each subscriber one at a time via the ORM. Now uses a single DELETE … IN (…) query.
  • MetaBox fields not filling on Posts — the MetaBox field registry returns a nested [post_type => [field_id => config]] structure; the generator was iterating the outer level and skipping every field.
  • Recipe step sequencing race condition — when WP-Cron and the browser tick completed a step at the same time, both paths could compute the wrong next-step index, causing steps to be skipped or run out of order. Both paths now anchor to the completing job's recorded position in the job list.
  • Recipe rollback deleting wrong items — the rollback button previously hit a content-type route that did not accept job IDs. It now calls a dedicated DELETE /jobs/{id}/rollback endpoint. Cleanup correctly finds seeded items in all WPML languages.
  • License validation when key is set in wp-config.php — if the key had never been activated through the UI (no stored instance ID), validation always failed. The API request now omits instance_id when none is stored, matching the LemonSqueezy key-only validation path.
  • Cleanup tab item counts now refresh automatically after a rollback.
  • Recipe cards can be re-run immediately after a recipe completes without requiring a page reload.
  • WPML language filter is now bypassed during all seeded-content cleanup queries, so posts and comments created in non-default languages are correctly found and deleted.

v1.3.9

June 2026 FluentCart & fixes
added
  • FluentCart featured images — the FluentCart generator now supports featured images. Choose any image provider (Picsum, LoremFlickr, Unsplash, Placehold.co, or Seeded Attachments) directly from the FluentCart tab. Seeded Attachments is selected by default for zero-HTTP-request speed.
fixed
  • FluentCart products invisible in shop when WPML is active — SeedPress sets WP_IMPORTING during generation to suppress expensive hooks; this also suppressed WPML's save_post handler, leaving products with no language assignment. SeedPress now calls wpml_set_element_language_details explicitly after each product is created.
  • Tab settings lost when switching tabs — navigating from Posts to Terms (or any other tab) and back would reset all form fields to their defaults. Tabs now stay mounted in the background so your settings are preserved.

v1.3.8

May 2026 Polish & hardening
added
  • Accessibility — progress bars now include role="progressbar" with aria-valuenow/min/max so screen readers can track generation progress. Status labels use aria-live="polite" to announce completions.
  • Recipe cards use semantic <article> and <h3> elements instead of bare divs.
  • Job error panel now shows total error count when the 20-error display cap is hit (e.g. "47 errors — showing last 20").
changed
  • Recipe Run action tightened to manage_options capability — contributors can no longer trigger heavy batch generation via recipes.
  • Creating a recipe with invalid steps now returns a clear error instead of silently dropping the bad steps.
fixed
  • Corrupted recipe run transient no longer causes PHP undefined index errors.

v1.3.7

May 2026 Recipe seeded images
added
  • "Use seeded images" toggle on recipe cards — appears automatically when seeded attachments are available and the recipe includes image steps. Ticking it routes all post featured-image and attachment steps through the seeded provider: no HTTP downloads, batches complete as fast as DB-only operations.

v1.3.6

May 2026 Progress feedback
changed
  • HTTP image batch size reduced from 25 → 10. Each browser-driven tick now completes in ~3–5 s on shared hosting instead of 15–20 s, giving more frequent UI updates during image-heavy generation.
fixed
  • Recipe progress no longer appears frozen during image downloads — a live elapsed-seconds counter (e.g. · 8s…) is shown while the current tick is in-flight.

v1.3.5

May 2026 JS-driven batching
changed
  • Batches are now driven by the browser, not WP-Cron. A new POST /jobs/{id}/tick REST endpoint runs one batch synchronously and returns the updated job state. The progress bar updates after every single batch with no polling delay.
  • Recipe steps chain instantly — when a step completes, JS receives the next job ID and begins ticking it immediately. No cron loopback round-trip between steps.
  • WP-Cron is retained as a silent fallback for closed tabs and WP-CLI usage. A transient lock prevents cron and JS from processing the same batch simultaneously.
fixed
  • Progress bar no longer jumps from 0% to 100% on fast jobs.
  • Recipe progress now shows accurate per-step counts throughout the run.

v1.3.4

May 2026 Bug fix
fixed
  • wp seedpress cleanup fatal error — WP_CLI\Utils\confirm() does not exist; corrected to WP_CLI::confirm().

v1.3.3

May 2026 Auto-updates
added
  • Auto-update system — SeedPress now reports available updates directly in your WP admin (Dashboard → Updates) without being listed on WordPress.org. A Cloudflare Worker proxies release downloads from the private GitHub repository using a server-side token; no credentials are exposed to WordPress sites.
  • Update notifications include version, changelog link, and a one-click upgrade button — identical to the standard WordPress plugin update flow.
  • License key is forwarded with each update-check request (ready for Pro gating in a future release).

v1.3.2

May 2026 Batch pacing fix
fixed
  • Batch pacing on live sites — batches were not chaining immediately because spawn_cron() was never called after scheduling the next batch event. On busy live sites this meant batches could sit idle for minutes waiting for an organic page load to trigger WP-Cron.
  • Dynamic batch size — DB-only jobs (seeded attachments, no HTTP) now run in batches of 100 instead of 25, making large seeded-attachment runs ~4× faster. HTTP-download jobs remain at 25 to keep memory usage predictable.

v1.3.1

May 2026 Progress bar
added
  • Improved progress bar for long batch runs — the counter no longer freezes between batches. An independent 1-second ticker shows elapsed seconds since the last batch completed ("~18 s since last batch"), so it's always clear the job is alive.
  • Batch number and total batch count are now displayed ("Batch 3 / 40").
  • Time-remaining estimate is suppressed until at least 2 batches have completed, avoiding inaccurate early guesses.
  • Animated shimmer on the progress bar fill and a spinner icon while a job is running.

v1.3.0

May 2026 Performance & UX
added
  • Parallel image downloads — all images in a batch are downloaded simultaneously using curl_multi instead of sequentially. A batch of 25 Picsum images now takes ~1–2 s instead of 25–50 s.
  • First-run onboarding modal — new installs are guided to pre-generate 25 seed images on first activation, with a live progress bar and a one-click "Generate 25 seed images" button.
  • CLI: early warning when --featured-image=seeded is used but no seeded attachments exist — points the user to generate attachments first.
  • Posts tab: live notice showing how many seeded attachments are available when the Seeded Attachments (fast) provider is selected.

v1.2.0

May 2026 Fixes & speed
added
  • Seeded Attachments (fast) image provider — when generating posts with featured images, pick from already-seeded media library items instead of downloading new ones. One DB query per batch of 25; no HTTP requests.
fixed
  • Seed Recipes only executed the first step — subsequent steps were never queued because Recipe_Runner::advance() was never called on job completion.
  • Recipe run-status polling returned the wrong response shape, causing the progress bar to show no data.

v1.1.0

May 2026 New integrations
added
  • Pro: Gravity Forms, WPForms, and Fluent Forms integration — seed fake entries into any form, with field-type-aware value generation.
  • Pro: WPML & Polylang integration — generate translated copies of posts in any active language.
  • Pro: FluentCRM integration — seed fake subscribers with names, emails, and contact details.
  • Pro: FluentCart integration — seed fake products with prices, SKUs, stock levels, and descriptions.

v1.0.0

May 2026 Initial Release
added
  • Background job processing via WP-Cron — all generation runs in batches of 25, no PHP timeouts.
  • Modern React admin UI at Tools → SeedPress with per-type tabs and a real-time progress bar.
  • Post generator — supports any registered post type, with content, featured images, and term assignments.
  • User generator — creates users with realistic names, emails, roles, and optional avatars.
  • Term generator — creates categories, tags, or any custom taxonomy with descriptions.
  • Comment generator — creates approved comments with guest or registered-user authors, including threaded replies.
  • Lorem Picsum image provider — free, no API key, fast CDN.
  • Safe cleanup system — every generated item is tagged with _seedpress_generated private meta; cleanup never touches real content.
  • Custom database table (wp_seedpress_jobs) for persistent job tracking and progress polling.
  • Built-in documentation tab inside the plugin admin.
  • Pro: WooCommerce product generator — simple products with prices, sale prices, SKUs, and stock.
  • Pro: Events Calendar event generator — events with start/end dates, venues, and organisers.
  • Pro: ACF & MetaBox integration — auto-detects field groups and populates all supported field types with realistic values.
  • Pro: Yoast SEO integration — auto-fills focus keyword, SEO title, and meta description.
  • Pro: RankMath integration — auto-fills focus keyword, title, and description meta.
  • Pro: LoremFlickr image provider — keyword-based photos from Flickr's CC pool.
  • Pro: Placehold.co image provider — customisable placeholder images.
  • Pro: Unsplash image provider — editorial photography via the Unsplash API.
  • Pro: Seed Recipes — chain multiple generator steps into one-click presets (Blog Launch, Portfolio, WooCommerce Store).
  • Pro: WP-CLI command group — wp seedpress generate, wp seedpress cleanup, wp seedpress recipe run, and more.
  • Pro: Rollback last job — delete only the most recent job's items without touching earlier seeded content.
  • Pro: Up to 10,000 items per run (Free: 200).
  • Pro: License key activation at Tools → SeedPress → License; unlimited sites.

Have a feature request or found a bug?