Change Logs

Check our changelogs below to see how frequently our plugins are updated! We practice customer-driven development, so if there’s something you want to see in our plugins come tell us about it on our Discord server!

All updates

Every release of every plugin, newest first. Pick a plugin above for its full changelog.

90 releases without an exact date are not listed here; each plugin’s own changelog still has them.

Super Speedy Imports 2.39

  • Security added current_user_can('manage_options') checks to the older AJAX handlers that previously only verified the nonce — ajax_new_import_handler, ajax_save_import_config_handler, ajax_import_config_handler, ajax_export_config_handler, ajax_get_csv_files, ajax_upload_csv_file, plus the taxonomy import/export AJAX handlers. Nonces verify request origin; the new capability checks make sure only an admin can actually call them, so a leaked nonce from another plugin's XSS no longer hands a low-privilege user the ability to create imports, overwrite configs, or upload files.
  • Security ?run_import=1&import_id=… GET URLs now require a CSRF nonce. Running an import has heavyweight side effects (DB writes, remote image fetches, optional delete-all), so the action is no longer triggerable by a hostile site embedding the URL in an <img> tag against a logged-in admin. Removed the dead #removedthis-devonly JS block that was the only place those URLs ever got rendered.
  • Security the "Functions" PHP code editor now honours DISALLOW_FILE_MODS and DISALLOW_FILE_EDIT. When either constant is true the save handler refuses to update the functions blob (the existing value is preserved) so production hosts that disable file edits also lock down the eval surface.
  • Security CSV upload tightened — capability raised from upload_files (Author) to manage_options (Admin); extension and MIME validated via wp_check_filetype_and_ext against a CSV / TXT whitelist; filename sanitized with sanitize_file_name so a path like ../../wp-config.php can't escape the imports dir. Plugin activation and every subsequent upload now drop a .htaccess (deny-all) plus an empty index.html into the imports directory, so even if the server is misconfigured to execute PHP under wp-content/uploads/ the imports dir is still non-executable / non-listable.
  • Security SQL injection hardening in the postmeta / relationships / variation stages. The strict ssi_is_safe_identifier() helper is now called at every SQL site that interpolates a CSV-derived column name, meta_key, taxonomy, or unique_id_meta_key — not just at table-creation time. validate_column_name() itself switched from a permissive blocklist (which missed backslash, null byte, and %/_ LIKE wildcards) to a strict allow-list ([A-Za-z_][A-Za-z0-9_ \-]*, max 64 chars). String-literal interpolations of those names were converted to $wpdb->prepare() with %s placeholders; the LIKE pattern in insert-postmeta.php additionally goes through wpdb->esc_like() so a meta_key containing % can't match unintended columns. Files touched: stages/core/insert-postmeta.php, update-postmeta.php, upsert-relationships.php, match-existing.php, insert-posts.php, stages/woocommerce/variable-products.php.
  • Security stripped user:password (and the URL fragment) from image URLs before they hit error_log. Supplier-feed CSVs sometimes carry credentialed URLs and shared-host PHP error logs can leak to other tenants. New helper redactUrlCredentials() on SSI_PostTemplate.
Super Speedy Imports 2.39 in its changelog

Super Speedy Imports 2.38

  • Renamed the import-template classes to carry an SSI_ prefix so they no longer occupy generic global-namespace names that any theme or plugin might also want to declare. ImportTemplate → SSI_ImportTemplate, PostTemplate → SSI_PostTemplate, CustomPostTypeTemplate → SSI_CustomPostTypeTemplate, WooCommerceProductTemplate → SSI_WooCommerceProductTemplate. The wp_ssi_imports.base_template column is unchanged — existing rows still carry the legacy strings (e.g. 'PostTemplate') and a new ssi_resolve_template_class() resolver rewrites them at read time, just before new $class($import). No DB migration, no class_alias() (which would keep the old global names occupied and defeat the point of the rename). New imports created via the admin UI or wp ssi create save the SSI-prefixed string directly because the template registry was updated to match. The ssi_template_js_files and ssi_template_css_files filters now pass the SSI-prefixed class name; any add-on that gates on the class name will need to match the new value.
  • Note for add-on authors external templates that extend PostTemplate directly will need to rename their extends clause to SSI_PostTemplate. The legacy resolver only rewrites at instantiation; it doesn't help with inheritance.
Super Speedy Imports 2.38 in its changelog

Super Speedy Search 5.53

  • Defensive clamps on LIMIT / OFFSET so SSS never emits negative paging in SQL. A production-log "LIMIT -100" pattern was traced to the rollup-variations search path (woo_search_products_old), where (paged - 1) * posts_per_page produced a negative offset for paged=0 (absint normalises negative inputs to positive but lets zero through unchanged). The fix clamps paged to max(1, …) and offset to max(0, …) at the source, plus a belt-and-braces pass in alter_query that strips any negative integers from the outer-query LIMIT clause if anything upstream still slips through. The legacy woo_search_products_old LIMIT-only branch is also clamped now. Symptom in mysqld.log was "syntax error … near 'LIMIT -100'" with the user seeing zero results on the affected page; no functional regression on valid inputs.
  • ?showweights=1 debug overlay now covers all post types and every weight, including the new taxonomy conditional match. Three fixes shipped together: (1) the new taxmatch weight from 5.53 wasn't being added to the score for single-post-type queries OR exposed as a debug column for either path — both fixed, so a single-PT search now scores taxmatch rules correctly and renders one weight_taxmatch_<tax>_<slug> column per rule, while multi-PT searches add a weight_taxmatch_total aggregate alongside the existing weight_meta_match_total/weight_meta_value_total/weight_meta_date_total. (2) The RELEVANCE total now appears in the debug output even when sorting by price/date/title etc. — previously it was only projected when orderby=relevance was the active sort, so admins comparing two products on a price-sorted page couldn't see what each one's relevance score would have been. (3) A new wp_footer HTML-comment fallback emits the per-post weight breakdown as <!-- SSS post 123 "Title" : RELEVANCE=… | weight_title=… | … --> for every result row regardless of theme. Themes that override both the WC product loop template AND the_content (custom block themes, headless renderers) used to drop the debug entirely; the comments are always there for view-source, the visible inline rendering still happens where supported.
  • Top Searches table on Analytics & Caching is now sortable and searchable. Click any of Search Term, Searches, Avg Speed or Last Searched to flip the order (default remains Searches DESC). The new filter input above the table queries against a FULLTEXT index on search_term — typing 3+ characters uses MATCH … AGAINST in BOOLEAN MODE with the same +word* prefix-wildcard pattern as the front-end search, so 'iph' finds 'iphone 13 case' instantly even on logs with millions of rows. Tokens of 1-2 characters automatically fall back to LIKE (prefix LIKE 'xy%' when the whole input is short, LIKE '%xy%' when combined with longer tokens that already narrow the set). The FT index is added automatically on existing installs the first time the Analytics tab loads after upgrade (one ALTER TABLE on a single-column varchar; runs in seconds even on busy logs). The active time-range filter (24h / 7d / 30d) still applies to the search results so what you type matches what's visible.
  • Administrator is now a user-controllable row in Elevated Search Roles. Previously the administrator checkbox was hardcoded on (disabled, always checked) so admins always saw out-of-stock, hidden and private products in search results — fine for most sites, but a few admins wanted to browse the storefront and search results the way a regular shopper would (e.g. to verify what customers actually see). The row now defaults to checked so existing installs are unchanged, but it can be unticked to make admin searches use the same visibility rules as everyone else. Other roles still default to off and remain opt-in.
  • Search-result cache key now includes orderby, order, a hash of the URL path (minus /page/N/), and hashes of the query's explicit tax_query and meta_query. Pre-5.53.7 the key was only (searchstring, post_type, paged, lang), so a search warmed at /shop/?s=foo without orderby would silently return its relevance-ordered IDs (with orderby overridden to post__in) for every subsequent /shop/?s=foo&orderby=price, every /product-category/X/?s=foo (different archive), and every price-filter or stock-filter refinement. The path component is necessary because at pre_get_posts time WP hasn't yet built the tax_query array for URL-derived archives like /product-category/gaming/ (that happens later in WP_Query::parse_tax_query), so a tax-array-only hash wouldn't have distinguished /shop/ from /product-category/X/. Each variant now gets its own cache entry. Cache hit rate drops slightly in exchange for correctness; on busy sites the warm tier rebuilds quickly under load.
  • Defensive sss_outer_orderby fallback in alter_clauses. When the user asks for orderby=price (meta_value_num) but the WP_Query meta_query JOIN didn't get built for whatever reason (an aggressive plugin stripped the orderby clause, another filter ran later, etc.), SSS now constructs the postmeta JOIN and ORDER BY explicitly so the outer query is never ORDER BY LIMIT n (which MySQL silently treats as no-ordering, losing the user's choice). Covers meta_value_num, meta_value, date/publish_date, and title; everything else falls back to a deterministic post_date DESC so the SQL is always valid.
  • Taxonomy combination suggestions: the post type label is now a claimable position when the admin enabled "Show at Start" or "Show at End" on the combination row. Previously typing only the post type name (e.g. "forestry") matched the fulltext index but the post-fulltext claim algorithm dropped every row because no actual taxonomy term name was matched – so suggestions for that post type silently never appeared. Now, when the admin opted to surface the post type label in the rendered suggestion, that label counts as an extra claimable position; typing "forestry" returns rows in the Forestry post type, and typing "forestry trees" ranks the Forestry/Trees row above the Agriculture/Trees row because Forestry/Trees scored 2 of 2 versus Agriculture/Trees scoring 1 of 2. Rows where the admin chose "Don't Show" are unchanged (label not claimable, row not findable by typing the post type name) – keeps "what the user sees == what they can claim". No rebuild required; the change is in the claim algorithm at query time and the existing taxonomy-suggestions table already includes the post_type_label in its FULLTEXT-indexed combined column.
  • The deferred-indexing hook surface is now aligned with Super Speedy Filters' SSF_Table_Maintenance pattern – same function naming (sss_defer_post_update, sss_defer_term_update, sss_process_deferred_updates), same shutdown priority (999), same DOING_AUTOSAVE and auto-draft skips, and the same wide hook coverage. SSS now hooks wp_after_insert_post, save_post, wp_insert_post (priority 99), transition_post_status, set_object_terms, the full WC product/variation/stock/duplicate set, bulk-edit and quick-edit AJAX, the WP importer hooks, and the explicit REST API insert/save/delete hooks for posts and terms – on top of the postmeta hooks (added_post_meta/updated_postmeta/deleted_post_meta) that SSF doesn't need but SSS does. All of them feed two deduped queues (posts + terms) drained once at shutdown, so a single product save that triggers 15 different action firings still runs one sss_update_posts batch. Same pattern as SSF, same function names where possible; a developer who learned one plugin's maintenance code immediately recognises the other's.
  • Incremental indexing now picks up postmeta changes that happen after wp_insert_post. SSS used to hook only wp_after_insert_post (and a couple of WC variation hooks), which meant any importer or plugin using the pattern "create the post, then call update_post_meta for each field" produced an index row with empty metavalues – searches by SKU or other indexed meta_keys would miss those products until the next rebuild. SSS now also hooks added_post_meta/updated_postmeta/deleted_post_meta, gated to only the meta_keys SSS actually indexes (the Meta Keys tab plus every key referenced by metamatch/metavalue/metadate weight rules). All of SSS's per-post indexing hooks now feed a deduped queue that flushes once at PHP shutdown, so a request that fires wp_after_insert_post plus eight update_post_meta calls plus two edited_term calls runs a single sss_update_posts batch instead of eleven. Same hook surface fires from admin, REST API, Gutenberg, WP-CLI and cron – any code path that goes through WordPress core's wp_insert_post/update_post_meta benefits.
  • New optional "Strict SKU search" mode on the Main tab. By default, SSS normalises punctuation in the fulltext index (so a search for ABC.D.E will match ABC_D_EF too — fast but loose, which is fine for most sites). Tick the new checkbox to layer an additional LIKE filter on the original, un-normalised meta values after the fulltext narrowing — searching for ABC.D.E will then return only products whose actual SKU contains the literal ABC.D.E, dropping the underscore-variant false positives. A new metavalues_raw column on wp_superspeedysearch holds the un-normalised meta string; populated from the next rebuild, then read with LIKE at query time on rows already narrowed by MATCH/AGAINST so the cost stays bounded. The filter only fires when the user's search term contains punctuation, so non-SKU searches are unaffected.
  • Readiness Status now shows a warning when MySQL's max_allowed_packet is below 64MB. The default on many MariaDB installs is 16MB, which is fine for everyday queries but too small for the rebuild's bulk INSERT/UPDATE statements once a catalogue grows past a few thousand rows – the symptom on those sites is an intermittent "Error establishing a database connection" mid-rebuild that recovers a few seconds later. The new row prints the current value plus a link to the KB article explaining how to raise it; rebuilds keep working at any value, the warning just flags the rebuild risk.
  • New "Taxonomy Conditional Match Weight" row on each per-type Weights block. Admin picks a taxonomy attached to the post type plus a term slug, and matches (or non-matches) of that term increase or decrease the relevancy score by a factor – same UX shape as the existing "Meta Conditional Match Weight". One new term_taxonomy_ids column on wp_superspeedysearch holds a comma-separated list of every term_taxonomy_id the post belongs to, populated via GROUP_CONCAT during rebuild; scoring uses FIND_IN_SET against that single column at query time, so there are no per-rule columns and no JOINs at search time. The one-time rebuild after upgrade adds the column – after that, adding, editing or deleting taxmatch rules takes effect on the next search with no rebuild required. The rebuild also bumps group_concat_max_len to 65535 so posts with many terms don't get truncated.
Super Speedy Search 5.53 in its changelog

Scalability Pro 6.21

  • Fixed possible infinite recursion in the license error handler: wp_error_added callback in Super Speedy Settings re-added the same WP_Error without unhooking, causing a stack overflow whenever another plugin (e.g. a GitHub update check) triggered a WP_Error with a JSON body containing a message field; the handler now unhooks during mutation, skips errors already enhanced, and only enhances errors originating from superspeedyplugins.com when the source URL is available
Scalability Pro 6.21 in its changelog

Super Speedy Imports 2.37

  • Fixed wp ssi <id> --workers=1 crashed with "Duplicate key name 'sss_tid'" during the load-csv stage. The 1-worker bypass left segment_from null, which sent load-csv.php down its historical "AJAX/REST/sequential" path — that path drops + recreates the batch table (losing the ssi_uid UNIQUE index that setupBatchTables had just made) and creates its own copies of the sss_tid / sss_post_id indexes, which then collide with the same indexes added by finalizeStage immediately afterwards. The bypass now sets segment_from / segment_to / byte_offset to pose as a single worker covering the whole CSV, so load-csv.php takes the worker code path (tables stay as setupBatchTables left them, inline finalization is skipped) and finalizeStage owns the post-load index creation. Multi-worker mode behaviour is unchanged. Other parallel stages (upload-remote-images, attach-existing-images, fix-attributes) do not have inline finalization that conflicts with finalizeStage, so their bypass behaviour stays as-is.
Super Speedy Imports 2.37 in its changelog

Super Speedy Imports 2.36

  • Gallery image metadata UI is now per-row. Each gallery URL row carries its own four metadata sub-rows (alt text, title, caption, description) directly beneath it. Click "+ Add another image column" to add a fresh URL row complete with its own four metadata sub-rows — handy for CSVs that split each gallery image across separate columns. Pipe-separated single-column users still see one row of five fields and continue to work unchanged. Each metadata sub-row supports CSV Field OR PHP Function, matching every other field mapping in the GUI.
  • Featured image metadata sub-fields now also expose the standard CSV Field / PHP Function method selector, so the user can compute alt / title / caption / description via a function instead of being forced to pick a raw CSV column.
  • load-csv: when gallery metadata is supplied as multiple CSV columns (one per gallery URL row), positions are preserved verbatim — empty metadata slots are emitted as empty strings between pipes rather than being silently dropped, so the metadata stays aligned with the gallery URL list even when individual cells are blank.
Super Speedy Imports 2.36 in its changelog

Super Speedy Search 5.52

  • wp sss rebuild now flushes the WordPress object cache at the end of the build. Without this, sites with a persistent object cache (Redis, Memcached) could keep serving the pre-rebuild alloptions blob and the search-column list used to build MATCH() queries would lag the actual rebuilt FULLTEXT index — manifesting as "Can't find FULLTEXT index matching the column list" until the cache expired on its own.
  • New multi-post-type search on the Front-end tab. Picking "Search multiple post types" (the renamed "Do not set" option, now moved off the Main tab) exposes a Layout choice: Single ranked list (the existing single-query behaviour) or Mixed sections by post type (a new layout that runs one query per post type and renders each section with its own template). Each path is independent – sites that never touch the new controls are unaffected.
  • Single-list mode adds two opt-in overrules: "Overrule post types" forces the search to exactly the ticked types (replaces whatever theme/Woo/site hooks would otherwise decide), and "Overrule template" routes the results page through the chosen post type's archive-{slug}.php so a multi-type search can look and feel like (e.g.) the product archive. Both default to "Let my site decide" so existing behaviour is preserved on upgrade.
  • Per-row weights in single-list multi-type queries. Previously SSS picked one post type and used its weights for the entire result set (so e.g. a mixed post+product query ranked products with post weights, ignoring product-specific metamatches like the _stock_status=instock boost). Each row is now scored using its own post type's weights via per-row CASE expressions over wp_superspeedysearch.post_type. Single-type queries are unaffected and emit the same SQL as before.
  • New "Post Type Promotion" row on each per-type Weights block – adds a constant boost to that type's relevancy score so admins can bias e.g. products above posts in a single ranked list. Has no effect in single-type searches or in Mixed Sections layout (where section order is the ranking).
  • Mixed Sections layout ships three new templates: templates/sss-multi-search.php (wrapper), templates/sss-multi-search-section.php (generic), and templates/sss-multi-search-section-product.php (Woo-aware, uses wc_get_template_part for full product cards). Themes can override at <theme>/super-speedy-search/<file>.php. Each section header supports a configurable heading with a <search-term> placeholder substituted at render time.
  • Plugin-wide exclude_from_search policy. Post types registered with exclude_from_search => true are no longer offered as options anywhere – Weights, Suggestions, Ajax post types, Default Post Type dropdown, multi-search overrule list, mixed-sections "Add section" dropdown, widgets, Gutenberg block. The post type author's intent (exclude from search) is now honoured by SSS's UI. Sites that intentionally want to expose such a CPT can re-enable it via the existing sss_post_types_args filter. Side effect on upgrade: an excluded CPT previously configured in (e.g.) the Ajax tab will disappear from the admin UI but its saved settings remain in sss_options.
  • Taxonomy combination suggestions are now ranked by how completely the user's typed words actually claimed the row's terms, not by raw depth. Each typed word claims at most one term, and rows where every term was claimed (perfect-fit) are surfaced first; within that tier, more terms claimed wins (a 3-term match beats a 2-term beats a 1-term). The old "depth priority multiplier" setting is removed – it could push triples to the top even when the user only typed a single word that incidentally hit two terms in the row, which produced misleading suggestions. Rows where the search only matched the post-type label (no term claimed) are no longer returned.
  • New "Token matching" setting on the Taxonomy Suggestions section: Optimal (default) finds the best token-to-term assignment regardless of typed order; Strict order requires tokens to claim terms left-to-right in the admin's tax_a → tax_b → tax_c order, so out-of-order typing scores lower. Choose Strict if you set the taxonomies in the order you expect users to type.
  • Taxonomy combination suggestion URLs now route through Super Speedy Filters when it's active, so click destinations like "Dogs ▸ Dog Grooming ▸ Cool Dogs Co ▸ Red" land on the pretty permalink form (e.g. /product-category/dogs/dog-grooming/brands/cool-dogs-co/color/red/) instead of mixing the pretty base with raw query args (?product_brand=cool-dogs-co&pa_color=red). Without SSF the existing query-arg URL is still produced. Requires the SSF Pretty URLs add-on for the prettified form.
  • Taxonomy Suggestions combination rows now have a "Show Post Type Name" dropdown (Don't Show / Show at Start / Show at End) so you can decide per-row whether to surface the post-type label in the suggestion (e.g. "Caterpillar – Excavators ▸ Machine") and where it appears. Default is Don't Show. Changing this preference takes effect immediately – no rebuild needed.
  • Taxonomy combination suggestions now bold the matching prefix tokens (e.g. typing "dog to" bolds "Dog" and "To" in "Dog Toys"), matching the existing post-title suggestions, and the dropdown styling (padding, hover, link colour) now matches the post-title and taxonomy lists for visual consistency.
  • Taxonomy combination suggestions now go through the ultra-fast ajax mu-plugin path when "Enable our ultra-fast ajax" is enabled – previously combinations always fell through to the standard WP REST API path while post-title and taxonomy suggestions used the fast path, so combinations were noticeably slower than the other suggestion types. (Bumps the bundled mu-plugin to 1.14.3 – it auto-redeploys on the next admin page load.)
  • Taxonomy Suggestions combination rows now filter the Taxonomy A/B/C dropdowns to only show taxonomies registered for the selected post type, so you can't accidentally pick a taxonomy that doesn't apply.
  • New Taxonomy Suggestions feature – precompute suggestion rows that combine 1, 2, or 3 taxonomy terms for a specific post type (e.g. "Caterpillar – Excavators – Machine") with accurate post counts per row. Only combinations that actually exist on published posts are indexed. Suggestions appear in the ajax dropdown below the existing token suggestions. Configure on the new Taxonomy Suggestions section of the Suggestions tab – pick a post type and 1-3 taxonomies per row; the depth is inferred from how many taxonomy slots you fill.
  • Same (make, category) pair that exists in multiple post types produces one suggestion row per post type, each with its own post count and post-type label, so users see e.g. "Caterpillar – Excavators – Machine" and "Caterpillar – Excavators – Industry" as separate rows when both contain products.
  • Filtered archive URLs for taxonomy-combination clicks are built at read time and land on a WooCommerce/taxonomy archive page with the other terms applied as query args – no dependency on Super Speedy Filters.
  • New REST endpoint /wp-json/sss/v1/combinations/<term> returns matching combinations as JSON.
  • New WP-CLI subcommand wp sss rebuild taxonomy_suggestions rebuilds only the taxonomy-combinations table. wp sss rebuild (no scope) and wp sss rebuild all now also include taxonomy suggestions as the final step; wp sss rebuild search and wp sss rebuild suggestions continue to skip them. Recommended: add wp sss rebuild to your server crontab for nightly refreshes if the admin-triggered rebuild ever hits your hosting's PHP timeout.
  • Advanced tab now lists all WP-CLI rebuild commands with guidance to prefer CLI when admin-triggered rebuilds fail due to hosting limits (30-second PHP timeout, memory caps, unreliable WP-cron).
  • Rebuild skips disabled suggestion types – if Enable Post Title Suggestions is off, the post-title token-generation pipeline is not run (previously it rebuilt the suggestion table regardless of whether anything would query it). Same applies to Enable Taxonomy Suggestions. The existing suggestion table is left in place so re-enabling the feature later doesn't require a rebuild to start working again.
  • Restructured Suggestions tab into two sections: Post Title Suggestions (the existing token-based suggestions, now with a post-types picker so you can scan specific post types for suggestion tokens instead of relying on the Ajax Post Types selection) and the new Taxonomy Suggestions section.
  • Ajax tab "Enabled Ajax Suggestions" renamed to "Enable Suggestions" with two checkboxes: Enable Post Title Suggestions, Enable Taxonomy Suggestions.
  • Legacy "Suggest Taxonomies" single-term field on the Ajax tab is now hidden for new users via a one-shot migration; existing sites that already had taxonomies ticked keep it visible so their setup continues to work unchanged.
  • Fixed a gap between the wp-admin toolbar and the left sidebar that appeared on every admin page under PHP 8.2+ – the SSS class was creating dynamic properties without declaring them, firing E_DEPRECATED warnings that caused WP to add a .php-error class to body.
  • Fixed undefined $wpdb warning in the Readiness Status collation list.
Super Speedy Search 5.52 in its changelog

Super Speedy Imports 2.35

  • Image metadata: optional alt / title / caption / description fields for both featured images and gallery images. Four new sub-rows appear under each parent media field in the admin GUI — pick a CSV column for each, leave blank to skip. Gallery metadata is pipe-separated and position-aligned with the gallery URL list (same | or , separator the URLs use). Metadata is applied during upload-remote-images, attach-existing-images (for posts whose featured image already exists in the media library), and all three branches of attach-gallery-images (previously-imported, freshly-uploaded, and local-search). Existing attachment metadata is updated in place when the user provides new values, so re-running an import refreshes alt text / titles without having to delete the attachment first. Skipped (empty) fields leave existing values untouched.
  • Added 8 new batch-table columns (4 featured_image_*, 4 gallery_image_*) and 4 new columns on the gallery_images aux table (alt_text, title_text, caption, description). New helper applyAttachmentMetadata() on PostTemplate handles the WP-side writes (wp_update_post for title/caption/description, update_post_meta for _wp_attachment_image_alt).
Super Speedy Imports 2.35 in its changelog

Super Speedy Imports 2.34

  • Added External / Affiliate product support for the WooCommerce template — new "External / Affiliate" subsection in the Product Data area with two fields: External URL (_product_url) and Button Text (_button_text). Setting an External URL on any row automatically switches that product to product_type=external so WooCommerce renders the external-link button instead of Add to Cart. Mirrors the existing Downloadable Products pattern; no extra stages, no extra SQL.
Super Speedy Imports 2.34 in its changelog

Super Speedy Imports 2.33

  • Gallery Images now supports multiple CSV columns via a + button in the admin GUI — no PHP function needed when image URLs are split across several CSV fields. Single-column configs save unchanged; multi-column configs save as an array. load-csv collapses everything to a single pipe-separated string so attach-gallery-images stays a single code path.
  • Per-taxonomy multi-value separator. New small input next to each taxonomy field accepts ; , or any character used between multiple terms (flat) or multiple hierarchy paths (hierarchical). Leave blank to keep the existing pipe-then-comma fallback so existing imports do not change behaviour.
  • import-taxonomies CLI progress now shows a single rolling counter ("Adding missing terms: N") instead of per-row SSI_PROGRESS lines. No extra SQL — the counter just increments per actual insert.
  • attach-gallery-images CLI progress is now a single rolling line ("Images Attached: X/Y (N%)") instead of one log line per image.
  • Fixed Parent grouping field in the GUI was not repopulating from saved JSON on import reload. The schema key is now aligned with the input name everywhere, restoring the round-trip.
  • Fixed parent synthesized rows now correctly grab terms from first child and aggregated terms where those are used in variations
Super Speedy Imports 2.33 in its changelog

Super Speedy Imports 2.32

  • Added live X/Y progress reporting to five parallel stages: upload-remote-images, attach-existing-images, attach-gallery-images, fix-attributes, and import-taxonomies
  • CLI displays stage progress in the same format as load-csv ("Upload Remote Images: 120/500 — 24%") by parsing SSI_PROGRESS lines emitted by worker subprocesses — no extra DB queries
  • AJAX admin page shows per-worker progress bars and a stage-wide X/Y label driven by processed/segment_total values returned in each batch result — no polling endpoint needed
  • Workers emit SSI_PROGRESS:X/Y to stdout; the CLI orchestrator accumulates worker stdout and parses it, replacing the previous approach that ignored worker output entirely
  • Fixed fix-attributes multi-batch continuation — offset was not being passed back on subsequent AJAX batch calls
Super Speedy Imports 2.32 in its changelog

Super Speedy Imports 2.31.1

  • Stage plan is now driven by import post type rather requiring import id
  • Stages are registered immediately after authorization, making them available to the GUI without needing to run an import
  • Clear error message when no stages are available, with explanation to enter a valid license key
  • Added filter for getMappings for use by add-ons
  • Added multiple public methods to the abstract class for use by add-ons
Super Speedy Imports 2.31.1 in its changelog

Scalability Pro 6.20

  • Fixed Drop All Indexes on multisite subsites dropping indexes across every subsite instead of only the current one
  • Indexes button now reads "Create All Indexes" when no indexes are selected, and "Update Active Indexes" when one or more are selected; "Create All Indexes" now creates every index regardless of checkbox state
  • Promoted the existing Drop All Indexes link to a proper secondary button so it is visible whenever any indexes exist
  • Checkboxes now update live as each index is created or dropped during Create/Update, and the Create/Drop buttons swap visibility automatically when the index set becomes empty or non-empty
Scalability Pro 6.20 in its changelog

Super Speedy Imports 2.3

  • Added end-to-end test suite for variable products covering all four import methods (parent+child rows, variations with grouping column, parents only, variations with existing parents) — one test per method under tests/woocommerce/variable-products/
  • Fixed synthesised parent row causing unique-index conflict on _ssi_unique_item_id in composite-UID mode — parent rows now write {group_key}| at INSERT time instead of being blanked and rewritten in a later UPDATE
  • Fixed composite-UID rewrite incorrectly re-concatenating synthesised parent rows (producing {group}|{group}|) — the UPDATE now only targets variation rows
  • Fixed synthesised parent rows missing post_type = 'product' — without it wc_get_product() couldn't resolve the parent, so variations failed to link on the first run
  • Fixed Method 4 (variations with parents already in DB) overwriting the existing parent's title and SKU with blanks — the placeholder batch row now pre-populates with the existing parent's current title / status / post_type / _sku so update-posts is a no-op for those columns
  • Fixed parent matching in composite-UID mode (Method 2 with blank Auto-created parent SKU) — WooCommerceProductTemplate now sets unique_id_meta_key to _ssi_unique_item_id so the parent lookup uses the composite key instead of _sku (which synthesised parents don't have)
  • Added --regenerate <filter> flag to tests/run-tests.sh for rewriting expected-result baselines when plugin output changes legitimately
  • Added CSV normalisation in the test harness so diffs are stable across WP resets — guid, post_parent, and meta__default_attributes columns are masked before comparison (post IDs drift between resets and were causing every test to spuriously "fail")
  • Added tests/README.md documenting the test harness (flags, directory layout, data1.csv/correct-results1.csv incremental pattern, per-method manual verification guide)
  • Added knowledge-base article "Importing Variable Products" — covers CSV layout, settings, and re-run behaviour for each of the four methods
  • Fixed stray character at top of tests/run-tests.sh and an incomplete ONLYRESET variable declaration that broke arg parsing
Super Speedy Imports 2.3 in its changelog

Super Speedy Search 5.51

  • Renamed "Search Analytics" tab to "Analytics & Caching" to better reflect the caching options it contains
  • Added auto-cache for slow searches: caches any search term whose tracked average speed exceeds a configurable threshold (default > 250ms) for a configurable duration (default 20 minutes). Works alongside the existing frequency-based and top-X auto-cache options
  • Fixed missing avg speed in Analytics & Caching table – front-end main-query searches were being tracked before the query ran so no speed was recorded (column always showed -). Now stashes the start time in pre_get_posts and records elapsed ms from the_posts filter after the query actually executes. Slow-search auto-cache now has real data to work with.
  • Meta Search tab now loads instantly on first page view – only a curated whitelist of commonly-searched meta keys (SKU, MPN, GTIN, ISBN, EAN, UPC, ASIN, brand, manufacturer, model, supplier, supplier code, part number, subtitle, byline, deck, summary, purchase note, variation description, etc.) is queried against wp_postmeta via an indexed IN lookup
  • Added "Fetch all meta keys" button on the Meta Search tab (replaces "Refresh Meta Keys List") that runs the exhaustive postmeta scan on demand via AJAX
  • Already-selected meta keys are always surfaced on first page load so saved settings remain visible even if not in the whitelist
  • Added new sss_meta_keys_whitelist filter so the whitelist can be extended per-site
  • Added exclusion for any meta_key containing "post_id" (e.g. foo_post_id_123) from the exhaustive scan – catches plugins that embed post IDs into meta key names
  • Added exclusion for meta keys starting with fsp_fb_ from the exhaustive scan
  • WP-CLI rebuild now prints each SQL statement BEFORE executing it (previously printed after completion) so users can see which query is currently running in real time
  • Added Search Analytics tab – track which terms users search for, view top searches, and configure per-term redirects and caching
  • Added search term redirects – admins can redirect popular search terms (e.g. "borisov") to specific URLs (e.g. /tags/borisov/) instead of running a search
  • Added search result caching – global cache, per-term cache, and auto-cache for top X searches from last Y hours
  • Added search tracking – aggregate search frequency tracking with INSERT ON DUPLICATE KEY UPDATE for minimal performance impact
  • Fixed undefined $default_language variable in suggestion builder causing PHP warnings and incorrect language assignment for user-added suggestions
  • Fixed collation detection SSS tables now match the actual wp_posts table collation (detected via SHOW TABLE STATUS) instead of relying on wp-config.php defaults which may differ from existing tables
  • Removed hardcoded collate utf8mb4_unicode_ci from suggestions DELETE join – the rebuild now ensures all suggestion tables have matching collations automatically
  • Rebuild process now ALTERs persisting suggestion tables (useradded/userremoved) to match the detected collation if they differ
  • Readiness check now always shows collation of all SSS and WordPress tables regardless of whether TranslatePress is installed
  • TranslatePress collation mismatches now show ALTER SQL for the user to run manually
  • Build process now properly aborts on "Duplicate entry" scheduler errors instead of retrying in an infinite loop, with instructions to use wp sss rebuild via CLI
  • Build process now properly cancels the queue on SQL errors instead of calling exit which left the queue intact
  • Fixed search result caching – cache now works for both full page and AJAX searches via shared code path in sss_pre_get_posts
  • Fixed cache storage bug where WordPress's found_posts filter fired before the_posts, clearing pending cache data before IDs could be captured
  • Changed cache storage from query vars (which WordPress resets internally) to SSS instance property using spl_object_id for reliable tracking
  • Cache now stores found_posts total from FOUND_ROWS() for correct pagination on cache hits
  • Frequency-based caching: "Cache searches which happen X times within Y period for Z duration" replaces simple "cache all" toggle
  • Settings tabs now retain active tab after saving (hash preserved in form referer)
  • Search speed (avg query time in ms) now tracked and displayed in Search Analytics table
  • Added Multi-search tab with two-phase search: Phase 1 restricts to recent content for faster results, Phase 2 falls back to unrestricted search if not enough recent results found
  • Configurable recent period (days/weeks/months) and "Search older items" button text
  • When Phase 1 fills a full page, pagination is replaced with "Search older items" button that shows remaining results excluding the recent ones
  • AJAX dropdown search also uses multi-phase: tries recent-only first, falls back to unrestricted if insufficient results
  • Multi-phase search works with existing search caching – cached results respect the date restriction
Super Speedy Search 5.51 in its changelog

Super Speedy Chat 1.07

  • Added LLM auto-reply system — classifies visitor questions against canned responses using OpenAI or Anthropic and auto-sends the best match when admins are away
  • Added LLM Auto-Reply admin settings tab with provider, API key, model, and system prompt configuration
  • Added conversation assignment — assign conversations to specific admin users from the detail sidebar
  • Added "Assigned To" column and assignee filter (All / Unassigned / Assigned to Me) to conversation list
  • Added 3-tier adaptive polling active, idle (30s), and deep idle (2min) with configurable intervals
  • Added Ultra Ajax-aware polling defaults — faster intervals when mu-plugin is active (1s/3s/10s vs 2s/5s/15s)
  • Added admin notification sounds — plays sound when new visitor messages arrive or waiting count increases
  • Added sound customization settings — message sound selection, open/close sound selection, and volume slider with preview buttons
  • Added honeypot anti-spam field to chat form with server-side validation in both REST and mu-plugin paths
  • Added auto-reply REST endpoint with rate limiting (3/min) for both normal and fast-ajax paths
  • Added bot message support (send_bot_message) for auto-reply and canned response delivery
  • Added 7 KB documentation guides: Quick Start, Customizing Appearance, Canned Responses, LLM Auto-Reply, Managing Conversations, Email Notifications, Ultra Ajax & Performance
  • Database schema updated to v3.0.0 (added assigned_to column on conversations table)
  • Bumped mu-plugin to v1.1.0 with honeypot check, auto-reply route, and updated rate limiting
Super Speedy Chat 1.07 in its changelog

Super Speedy Coming Soon 1.5

  • Added Super Speedy Emails integration as an alternative to MailerLite
  • New Email Provider dropdown on the product edit page to choose between MailerLite and SSE
  • When SSE is selected, a form picker lists all active SSE forms for easy selection
  • SSE forms render inline with full styling, fields, and AJAX handling from the SSE form editor
  • Provider-specific fields toggle visibility based on selection
Super Speedy Coming Soon 1.5 in its changelog

Super Speedy Imports 2.2

  • Fixed variation settings (Auto-Create Parent Products) not saving/reloading — typo in save handler checked wrong POST field; load handler passed field definitions instead of flat saved values to the UI
  • Reorganised admin UI: Unique Item Identifier now renders at the top of the Product Data section; variation settings moved into the Variable Products subsection
  • Added import file type radio selector (parent+child rows, variations with grouping column, parents only, variations with existing parents) — controls which variation settings are visible and is saved for use by the import runtime
  • Additional options now support section/subsection properties, mirroring the field mapping pattern — templates can place options in specific UI sections by setting section and subsection in PHP
  • Added field_with_method additional option type — renders CSV Field / PHP Function selector matching the standard field mapping layout; used for parent grouping, parent title and parent SKU fields
  • Parent title and parent SKU fields now support PHP Function mode in addition to CSV Field
  • Removed delete (X) button from template-defined fields rendered in Product Data sections
  • Updated tooltips Unique Item Identifier now mentions "Typically SKU"; Parent Identifier Value now mentions "Typically parent_sku"
Super Speedy Imports 2.2 in its changelog

Super Speedy Coming Soon 1.4

  • Replaced template override with hook-based approach for theme-independent add-to-cart replacement
  • Add-to-cart is now unhidden at priority 29 on woocommerce_single_product_summary, just before it would run
  • Works for all product types (simple, variable, grouped, external) and no longer requires a price to be set
  • Updated CSS to use standard WooCommerce selectors instead of theme-specific classes
Super Speedy Coming Soon 1.4 in its changelog

Super Speedy Chat 1.06

  • Improved mobile chat experience — widget now goes full-screen on phones so top messages are always visible
  • Added close button (X) in chat header for easy exit on mobile
  • Fixed background page scrolling when chat is open on mobile devices
  • Added touch scroll containment so finger scrolling stays within the chat messages
  • Fixed chat window overflowing above screen when virtual keyboard opens on mobile
Super Speedy Chat 1.06 in its changelog

Super Speedy Search 5.50

  • Fixed suggestion builder stopword removal using backreference syntax incompatible with MariaDB, which caused corrupted suggestions like "1the", "1end" to appear
  • Fixed possessive apostrophes creating spurious "s" tokens in suggestions (e.g. "trump s", "biden s") by stripping 's before punctuation removal
  • Added smart curly apostrophe handler to normalise them to straight apostrophe's
  • Fixed PHP warning "Attempt to read property before_loop on null" in Ultra Ajax mode by setting up proper post context and guarding thumbnail calls for posts without images
  • Added some CSS fixes for ajax search – min width of images and forced wrapping of ultra long words in the titles (thanks @macksix)
Super Speedy Search 5.50 in its changelog

Super Speedy Chat 1.05

  • Added instant bidirectional Discord integration — visitor messages pushed to Discord threads, Discord replies relayed back to WordPress in real-time
  • Added companion Node.js Discord bot (bot/ directory) with Gateway connection
  • Added Discord admin settings tab with step-by-step setup guide
  • Added canned responses system with database table and admin CRUD interface
  • Added "Save as Canned" button on admin messages in conversation detail
  • Added canned responses admin tab with guide and management UI
  • Added REST endpoints for canned response management and Discord incoming messages
  • Added automatic database upgrade on version mismatch
  • Improved admin chat interface with new styles and enhanced JS
  • Version bumped to 1.05.2
Super Speedy Chat 1.05 in its changelog

Auto Infinite Scroll 1.63

  • Fixed Woo Variation Swatches not initializing on products restored via magic back button history
  • Fire third-party plugin re-initialization events after restoring archive from local storage
Auto Infinite Scroll 1.63 in its changelog

Super Speedy Filters 6.32

  • Fixed Accordion Effect, Minimizable (default open), and Minimizable (default closed) container types not working on PostMeta Range, PostMeta Toggle, and PostMeta widgets
  • Fixed AJAX handling when archive transitions between products and no-products states
  • Fixed Polylang language filter persisting across filtered pages via tax_query reading
  • Fixed early state caching preventing language and other plugin-added taxonomy filters from appearing
  • Excluded Polylang language taxonomy from active filters widget, URL generation, and hasUsableFilters checks
  • Reversed multiselect URL parameter from expand_ to narrow_ so expand (OR) is the clean default URL
  • Replaced rewrite rules dependency with enhanced parse_request handler for pretty URL routing
  • Fixed multi-term pretty URLs (e.g. /color/black/green/) — state reader no longer overwrites multi-term selections with single queried object
  • Added SSF_VERBOSE_DEBUG mode for invisible HTML comment diagnostics on client sites
  • Added ultra-fast page AJAX mu-plugin option to skip unnecessary plugins during filter AJAX requests
  • Implemented shared addon registry (ssp_addon_registry wp_option) replacing addon.json active flags
  • Added ssf_register_addons filter for external addon plugins to override bundled addons
  • Added ssf_get_object_ancestors_table() for Super Speedy Archives integration — auto-detects sstr_object_ancestors when available
  • Updated all object_ancestors queries in fast-cat-fetcher.php and pre_get_posts to use table detection
  • Performance tab now works with both bundled and Super Speedy Archives builder classes
  • Created 5 standalone addon plugins (pretty-urls, seo-indexing, seo-overrides, inline-product-filters, category-display)
  • Added source indicator (Bundled / Standalone Plugin) to Add-ons tab
  • Fixed multi-taxonomy pretty URL boundary detection — next-taxbase search now finds nearest position after current, not first match anywhere
  • Fixed parse_request handler to set post_type, wc_query, and taxtemplate query vars (previously only set by rewrite rules)
Super Speedy Filters 6.32 in its changelog

Changelog summary by plugin

Scalability Pro

Speed up your whole site – big catalogues, big databases, no re-architecture

  • Latest version6.29.24 (15th August 2026)
  • Last 30 days0 updates
  • Last 90 days33 updates
View changelog →

Super Speedy Coming Soon

Build a launch waitlist – countdown and email capture on any product

  • Latest version1.7.6 (12th August 2026)
  • Last 30 days0 updates
  • Last 90 days3 updates
View changelog →

Delayed Image Import

Stop image servers throttling your imports – download them later

  • Latest version2.28.6 (12th August 2026)
  • Last 30 days0 updates
  • Last 90 days3 updates
View changelog →

Super Speedy Performance Analysis

Find which plugin is actually making your site slow, with proof

  • Latest version0.18.0 (12th August 2026)
  • Last 30 days0 updates
  • Last 90 days77 updates
View changelog →

Super Speedy Ajax Prices

Fully cache your shop – correct prices, stock and dynamic pricing for every visitor

  • Latest version1.13.13 (11th August 2026)
  • Last 30 days0 updates
  • Last 90 days4 updates
View changelog →

Super Speedy Chat

Own your live chat – real-time, self-hosted, fast, reply straight from Discord/WhatsApp

  • Latest version1.14.1 (11th August 2026)
  • Last 30 days0 updates
  • Last 90 days11 updates
View changelog →

Country Based Prices

Show every visitor prices in their own currency, correct on a fully cached store

  • Latest version1.13.2 (11th August 2026)
  • Last 30 days0 updates
  • Last 90 days1 updates
View changelog →

Super Speedy Filters

Fast product filters and pretty, indexable permalinks on every archive

  • Latest version6.44.0 (6th August 2026)
  • Last 30 days0 updates
  • Last 90 days0 updates
View changelog →

Super Speedy Imports

Easy to use. Built for speed.

  • Latest version2.85 (6th August 2026)
  • Last 30 days0 updates
  • Last 90 days0 updates
View changelog →

External Images

Keep your images off your server – on a CDN, S3, anywhere

  • Latest version3.43 (3rd August 2026)
  • Last 30 days0 updates
  • Last 90 days0 updates
View changelog →

Fullscreen Typeform

Put a Typeform full screen on your own domain, with your own branding

  • Latest version2.0.0 (27th July 2026)
  • Last 30 days0 updates
  • Last 90 days0 updates
View changelog →

Super Speedy Search

Speeds up front-end and wp-admin search

  • Latest version5.57.1 (22nd July 2026)
  • Last 30 days0 updates
  • Last 90 days0 updates
View changelog →

Auto Infinite Scroll

SEO-friendly infinite scroll that keeps your place on the back button

  • Latest version1.70 (22nd July 2026)
  • Last 30 days0 updates
  • Last 90 days0 updates
View changelog →

Super Speedy Sitemaps

All other sitemaps were so slow, we built our own

  • Latest version1.10.4 (20th July 2026)
  • Last 30 days0 updates
  • Last 90 days0 updates
View changelog →

Super Speedy Archives

Category, tag, brand and author archives that stay fast as the catalogue grows

  • Latest version3.1.2
  • Last 30 days0 updates
  • Last 90 days0 updates
View changelog →
▲
▼
1/1