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.
Auto Infinite Scroll 1.70
- Fixed the second load more button being permanently on – unchecking "Enable second load more button" had no effect because an empty saved value was being forced back to "on", so shops auto-fetched large batches (10 pages by default) and effectively loaded everything. It now honours the setting.
- Fixed the load more button appearing at page 0 when the second button is disabled – it now auto-loads the configured number of pages first, then shows the button, and repeats every X pages, so visitors can stop and reach the footer.
Super Speedy Ajax Prices 1.5.0
- Fixed dynamic pricing plugins (e.g. Advanced Dynamic Pricing for WooCommerce) no longer destroy the AJAX price placeholder. Our price filter now runs last, so when a pricing rule matches a logged-in user their discounted price is wrapped and refreshed instead of the plugin silently doing nothing.
- Fixed prices and stock now refresh on cached pages served to logged-in users (WP Rocket guest cache for all users) and on pages cached for more than 24 hours (permacaching). The AJAX endpoint no longer requires a nonce – nonces are bound to the user who warmed the cache and expire after 24 hours, so cached pages were getting silent 403 rejections and rolling back to the stale cached price. The endpoint is read-only and returns only published-product price and stock data, with a per-request product cap.
- New logged-in visitors on cached pages no longer see a flash of the guest price. Their price boxes keep their size but stay hidden until the real price arrives, then fill in one frame. Guests still see cached prices instantly. If the price request fails or takes over 3 seconds, the cached price is revealed so nothing is ever left blank. Detection uses a small ssap_li cookie set at login.
- Changed tier-aware variation pricing is now always on and the settings toggle is gone. The variation price cache key includes the logged-in user's role set, so membership or wholesale tier prices are never served from another user's cache. Guests share one cache entry as before. Keying by role set (not user ID) means at most a handful of extra cache entries per product, which is why no setting is needed. Plugins that price per individual user can extend the key via the ssap_user_context_for_request filter.
- Tests new proof suite covering price-beats-cache, stock-beats-cache, Advanced Dynamic Pricing compatibility (membership tier percentage discount), guest-cache nonce scenarios and the member hide-then-fill behaviour, plus an unpaginated fixture archive page.
Super Speedy Chat 1.11.0
- NEW WhatsApp integration via the Meta Cloud API (no companion bot required)
- Visitors can chat with you on WhatsApp – messages arrive in the admin dashboard like any other conversation, with replies delivered back to their WhatsApp
- Optional Chat on WhatsApp link in the front-end chat bubble
- Forward every chat message to your personal WhatsApp for instant phone notifications – quote-reply from your phone to answer, routed back to the right conversation
- Replies from Discord now reach WhatsApp visitors and vice versa – all channels stay in sync
- WhatsApp settings tab with webhook config display, test connection button and re-engagement template support for Meta's 24-hour reply window
- Conversation list now shows a channel badge (WhatsApp/Discord) and WhatsApp conversations show phone number and reply-window status in the sidebar
Super Speedy Imports 2.77.0
- Added auto-mapping now works in the Lite editions too, not just Pro. The recognition engine was split out of the export file into
functions/import-recognition.phpso every edition can auto-configure an import from its CSV. - Improved auto-mapping is now instant on large files. It samples the first rows to detect column shapes rather than streaming the whole CSV; identity uniqueness and parent references are still validated when the import runs.
- Added product attributes are recognised from the data (short repeating values, and any
_Description/_Imagesibling columns) and offered as one-click accepts in the setup checklist. The attribute taxonomy is created when the import runs. - Added creating an import streams a live discovery list – each column and its destination prints as it is recognised, ending with a mapped/to confirm/unmatched summary. The popover stays up until the mapping form and CSV preview are fully rendered, so nothing loads in behind it.
- Improved selecting a CSV in the create dialog is instant. The receipt shows cheap facts only (rows, columns, type guess); all recognition happens once, after Create. Row counts on huge files are capped at 5,000 ("5,000+ rows") in both the receipt and the preview panel's row navigator instead of streaming the whole file.
- Fixed clicking Create before the CSV type detection had returned could run the auto-mapper against the wrong import type (posts instead of WooCommerce products), mapping only a handful of columns. The server now derives the import type itself via
ssi_suggest_template_for_csvunless the user explicitly chose one. - Fixed recognised-but-unregistered product attributes with
_Description/_Imagesibling columns now auto-map fully (attribute plus term data) instead of waiting in the accept list. - Fixed the CSV preview panel's mapped-column colouring no longer depends on load timing; it is recomputed once the mapping form has finished rendering.
- Fixed the Create Import button can no longer be double-submitted into an "import already exists" error.
- Fixed term-data columns (term descriptions, images) auto-mapped onto a taxonomy or attribute now show as mapped in the setup checklist instead of reading as unmapped.
- Fixed term data mapped onto a
pa_product attribute (image, description, swatch colour) was dropped on save; it now persists like taxonomy term data. - Fixed when a stage hit a hard error mid-run (for example a taxonomy term that could not be created), the buffered progress text was flushed ahead of the JSON error, so the browser runner reported an opaque "non-JSON response" instead of the real cause. The runner now discards buffered progress before the error and carries it in the response, so the actual error message is shown.
Super Speedy Imports 2.76.4
- Fixed loading an import configuration (including Demo Data and freshly-mapped imports) failed with a "not valid JSON" error after the 2.76.2 wp.org compliance pass switched the AJAX handlers to
wp_send_json. The JavaScript now accepts both string and pre-parsed object responses.
Super Speedy Imports 2.76.3
- Improved WordPress.org Plugin Check compliance – the runner's
stageandfilerequest parameters are unslashed and sanitised, and web callers can only name an alternate CSV inside the plugin's imports folder (WP-CLI keeps absolute paths). - Improved all debug logging (
error_log, backtraces, deprecation-warning suppression) moved to Pro-only files, so the Lite editions ship no development functions at all. Error detail in import logs is formatted withwp_json_encodeinstead ofprint_r. Lite user-facing error reporting is unchanged. - Improved the wp.org build now truncates the shipped readme changelog to the most recent releases (the full history stays in the repo) and refuses to build if any development function creeps back in.
Super Speedy Imports 2.76.2
- Improved WordPress.org review compliance – inline admin scripts and styles moved to the enqueue API, all AJAX responses sent via wp_send_json, JSON config intake is unslashed and sanitised on arrival, AJAX action names and the import history classes are ssi_ prefixed, and a stray development SQL file no longer ships. No behaviour changes.
Super Speedy Imports 2.76.1
- Improved WordPress.org Plugin Check compliance pass – file cleanup now goes through wp_delete_file, disabled form controls are rendered with the disabled() helper, and the import history, import issues and staging-table cleanup queries use prepared identifier placeholders. No behaviour changes.
Super Speedy Search 5.57.1
- Fixed a complete rebuild not recording the schema version on the common path where the suggestions table already exists and a forced suggestions rebuild is off. That path returned early, before the finalising step that writes the recorded version and flushes the object cache, so a rebuild could report success yet leave the version stale — and the query layer, which trusts that version, kept assuming an older schema. An
allrebuild now always finalises, whichever path it takes.
Delayed Image Import 2.28.0
- Fixed the product detail page showed the "Awaiting product image" placeholder instead of the hot-linked image. WooCommerce's single-product gallery template bypasses the thumbnail filters when there is no local image, on block themes (Twenty Twenty-Five) and classic themes alike. The featured slot, the gallery wrapper class and the placeholder are now all filtered.
- Fixed gallery images did not render on the product page while the featured image was still delayed – WooCommerce skips its thumbnails loop without a real featured image id. Fully-delayed products now render their whole gallery, and a product with gallery images but no featured image shows the first gallery image in the main slot instead of the placeholder.
- New the pre-hydration gallery now behaves like a real one – flexslider thumbnail strip, correct viewport height once the remote images load, and the PhotoSwipe lightbox works with hot-linked images.
- Fixed themes that build their own product galleries or placeholder markup (Blocksy via
wc_placeholder_img, OceanWP viawc_placeholder_img_src) now show hot-linked images too. Verified on Twenty Twenty-Five/Four/Three/One, Storefront, Astra, OceanWP, Kadence, Blocksy, GeneratePress, Neve and Hello Elementor. - New de-duplication. Imports that map the same column to both featured image and gallery no longer produce a fake "gallery" of one identical image – the duplicate is dropped from the hot-linked display AND at hydration time, so the downloaded product ends up with a featured image and no redundant gallery. Comparison is scheme-insensitive (http/https match).
- Fixed image URLs without a file extension (e.g.
picsum.photos/seed/x/800/600, CDN transform endpoints) now hydrate. The file is downloaded first and its type read from the content, with a meaningful filename built from the URL path. A URL that returns something other than an image is rejected with a cleardii_not_imageerror into the failed-images list.
Super Speedy Filters 6.40.1
- Fixed PHP deprecation notices on PHP 8.2 and above: two internal debug properties were being created on the fly rather than declared. Harmless in themselves, but a single deprecation during an admin request makes WordPress add an error class to the page, which nudges the admin menu out of position.
Super Speedy Imports 2.76.0
- New the auto-mapper now detects term data. Columns like Color_Image, Color_Description and Color_Hex alongside a mapped Color column are recognised (by name AND by their data) and mapped to the term's thumbnail image, term description and swatch colour. It also works backwards: an unrecognised column with term-data siblings, such as Pattern with Pattern_Image, is mapped as that product attribute.
- New when the External Images plugin is active, image columns are automatically mapped to its URL fields (external_image_url and gallery_urls) instead of the media library – products get their images served straight from the URLs and nothing is downloaded during the import.
- Improved variation attributes are now observed from your data rather than assumed. Only attributes whose values actually differ between a parent's variations (typically colour and size) are marked as variation attributes; material, pattern and the like stay as plain attributes.
- Improved the auto-mapper recognises more columns – manage stock, rating, review count and MPN – and the product type column is reported as driving the simple/variable detection instead of showing as unrecognised.
- New the auto-mapper understands the standard WooCommerce exporter CSV format. Punctuated headers ("Weight (lbs)", "In stock?"), the "Meta: key" convention, tax status/class, backorders, sold individually, sale price dates, purchase note, shipping class, download limits, external URL and pivoted attribute columns ("Attribute 1 name" + "Attribute 1 value(s)") all map automatically when the attribute is consistent, with clear explanations for anything that genuinely needs a human (per-row pivoted attributes, upsell/cross-sell references, source-site IDs).
- New the auto-mapper now understands Magento, Squarespace, Wix, PrestaShop, Etsy and BigCommerce export formats. Magento gets its category paths configured automatically ('/' separators, 'Default Category' root stripped) and its enabled/disabled flags translated; Squarespace and Wix variant groupings synthesise variable products the same way Shopify's Handle does, including Squarespace's space-separated image lists; PrestaShop's semicolon lists, tax-excluded prices and EAN13 map directly; Etsy's variation pairs and materials become attributes. Structural columns each platform carries (Magento's configurable_variations, BigCommerce's row-order variants, SKU reference lists, store-scoping flags) are explained in plain English rather than left unrecognised.
- New a raw Shopify product export now imports with zero manual mapping. The auto-mapper recognises the Handle grouping, switches on the variations-only import mode (one variable product synthesised per Handle, Options become the variation attributes) and translates Shopify statuses.
- New value transforms. When a column's meaning is clear but its values speak another tool's vocabulary – the WooCommerce exporter's 1/0/-1 publish flags, Shopify's active/archived statuses, TRUE/FALSE flags – the auto-mapper attaches a translation instead of refusing the column. Hand-written configs can use them too (additional_options.value_transforms), and the registry is filterable for custom transforms.
- New Shopify and WebToffee exports are understood too – Handle, Body (HTML), Vendor, Option1/2 Name+Value pivots, Variant columns with correct Compare At Price semantics (it is the regular price, Variant Price is the selling price), and the tax:/attribute:/meta: prefixed-header conventions. A Shopify file with no parent column gets a plain-English note explaining the Handle grouping.
Super Speedy Imports 2.75.0
- New (Pro) import term metadata alongside your items. Each taxonomy row on the mapping screen gains a "+ Term data" control for mapping term descriptions, custom term meta and term images from CSV columns. Image URLs are detected automatically and sideloaded into the media library. In Lite the control is visible but locked.
- Improved Lite now shows the Beta features and Performance Options panels on the Settings tab greyed out with a PRO Only badge, instead of hiding them, so you can see what Pro adds. Their engine and saves remain Pro-only.
- Fixed clicking "+ New Import" with unsaved changes to the current import config now shows the Unsaved Changes popover instead of silently discarding the edits. Refreshing or leaving the page with unsaved changes now triggers the browser's leave confirmation too.
- Changed the Lite builds no longer ship the term metadata engine (
term-metadata.php,term-metadata-writer.php) or the unused undo helper files (undo-change-detection.php,undo-chunked-restore.php). - New bundled demo data "Variable products with term images" – 10 variable products with 90 colour/size variations, with images on the colour, size and category terms.
- New handle-slug-duplicates stage. Duplicate slugs for NEW items are resolved in their own stage (between match-existing and insert/update), gated so imports with no collisions skip the work entirely. On large sites the old approach scanned the whole posts table on every import; numbering is now also aware of which slugs the site actually occupies, fixing a rare collision.
- Changed duplicate unique identifiers now stop the import with clear instructions instead of quietly importing renamed copies. This covers both directions – two CSV rows sharing an identifier, and an identifier that matches more than one existing item on the site. Where a differing column can be found (e.g. variations sharing their parent SKU), the message suggests the composite identifier to use, such as {SKU} {Colour}.
- Improved the load-csv finalisation on large imports is much faster – all batch-table indexes are built in a single pass instead of nine – and every statement in it now records its own duration in import history.
- Improved post-import tasks (WooCommerce term recounts, cache clears, lookup table regeneration) now appear in import history as their own stage with per-task durations.
- Fixed a successful large import no longer shows "Import failed" when completion arrives via the recovery poll after a client timeout.
- Fixed exporting and re-importing taxonomies no longer accumulates duplicate WooCommerce attribute labels.
- Fixed the imports-list row icons (schedule, configure, history) now update the URL hash, so refreshing the page keeps the tab you were on.
- Fixed run-screen buttons keep proper padding when their labels wrap to two lines.
Super Speedy Search 5.57.0
- Added an MCP / AI-agent surface. Eleven abilities under the
sssnamespace let an AI assistant read and tune your search configuration through the WordPress Abilities API (WordPress 6.9+), over the standard REST endpoints with an Application Password. No extra plugin is needed on the site. - Added
sss/test-query, the ability the rest depend on: it runs a real front-end search and returns the ranked results together with the score breakdown for each one, so an assistant can see which column earned each result its position instead of guessing. - Added read abilities
describe-search-config(the full weight, column, synonym and combination vocabulary as data, including a plain statement that there is no fuzzy typo matching),get-index-status,get-weights,list-synonymsandget-combination-settings. - Added write abilities
set-weights,upsert-synonyms,delete-synonym,set-combination-settingsandrebuild-index. Unknown weight keys are rejected with the list of valid ones rather than silently written. rebuild-indexrebuilds a batch at a time against a cursor, so a large catalogue can be rebuilt over HTTP without hitting a timeout. It refuses to resume if the settings changed mid-rebuild.- Added the
sss_manage_searchcapability and a "Search Manager" role, so the account an AI agent uses needn't be a site administrator. Existing administrators get the capability automatically. - Added a stdio MCP bridge (
tools/sss-abilities-mcp-bridge.mjs) for connecting Claude Code, Claude Desktop or any other MCP client to a site. - The Search Manager role is now created on plugin activation and under WP-CLI, so
wp user create <name> --role=sss_search_managerworks without first loading a wp-admin page. - Fixed "WordPress database error Unknown column 'language'" on every keystroke for sites whose suggestions table predates 5.44. The suggestions query decided whether that column existed by reading the schema version hard-coded in the plugin file rather than the one recorded in the database, so the check was true in every release since 5.44 and the query always referenced the column. It now reads the recorded version, and an install still on the older schema simply serves suggestions unfiltered by language instead of erroring.
- Fixed a rebuild reporting success while leaving the suggestions table on an old schema. The table structure is now created and migrated by every rebuild scope, including when post-title suggestions are switched off — that is cheap DDL only, so rebuilds with suggestions disabled stay just as fast, and the expensive token build is still skipped.
- The recorded schema version is now written once, as the final step of a complete rebuild, instead of by the search stage. It used to advance on rebuilds that never touched the suggestions tables, so it could claim a structure the database did not have.
- Fixed the rebuild's option writes being invisible to a persistent object cache (Redis, Memcached) when run from the admin Rebuild button or the schedule. Those writes go straight to the database, so the cached values survived them; only the WP-CLI rebuild cleared the cache afterwards. All three paths now finish the same way.
- Fixed the
?showweights=1debug breakdown not adding up to the total relevance score. The excerpt, taxonomy and meta-value contributions were being multiplied by their weight factor twice, and the base fulltext score was not shown at all. The displayed contributions now sum to the score they explain. - Fixed a SQL error that broke search entirely when
?showweights=1was on and every search term was consumed by a synonym group.
Auto Infinite Scroll 1.69
- Updated super-speedy-settings to the latest version
Delayed Image Import 2.27.2
- Updated super-speedy-settings to the latest version
External Images 3.39
- Updated super-speedy-settings to the latest version
Scalability Pro 6.26.4
- Updated super-speedy-settings to the latest version
Super Speedy Ajax Prices 1.4.4
- Updated super-speedy-settings to the latest version
Super Speedy Chat 1.10.5
- Updated super-speedy-settings to the latest version
Super Speedy Coming Soon 1.6.4
- Updated super-speedy-settings to the latest version
Super Speedy Filters 6.40.0
- Fixed the filter widgets listing no terms when the performance add-on is switched off. The term-count engine assumed the
object_ancestorsspeed table always exists; it now falls back to reading term ancestry live from theterm_taxonomyandterm_relationshipstables when that table is absent, so filtering keeps working (just a little slower) with performance disabled. This is the same engine for products and custom post types. - Fixed breadcrumbs not reflecting the active filters. On a filtered archive the trail dropped any filter that lives in a query parameter (for example a WooCommerce attribute), so it showed only the base category; the active filters are now included in the trail.
- Fixed Open Graph tags describing a single post instead of the archive on filtered archive pages.
og:url,og:titleandog:descriptionwere taken from whichever post was current in the loop; on an archive they now use the same filter-aware URL, title and description as the canonical tag and page title. Single posts and pages are unchanged. - Fixed inline archive filters rendering every configured attribute at every hook position when more than one attribute was configured.
Super Speedy Performance Analysis 0.7.2
- Updated super-speedy-settings to the latest version
Super Speedy Search 5.56.2
- Fixed the forced reflow PageSpeed Insights was reporting against
super-speedy-search.js. Awindow.innerWidthread ran on page load, once per search form, interleaved with class changes, which forced a full synchronous layout during startup. The block doing it turned out to be dead code, so it is gone. The remaining geometry reads are gone too, so the script no longer forces a layout at any point. - Fixed a JavaScript error when pressing Escape in a search box. An undeclared variable threw a
ReferenceErrorwhich aborted the handler before it cleared the body scroll lock, so on mobile the page was left unscrollable after closing the search. - Moved the 600px mobile breakpoint out of JavaScript and into real CSS media queries. The mobile/desktop choice used to be made once at page load and never revisited, so rotating a phone or resizing a window across 600px left the wrong search UI until you reloaded. It now follows the viewport.
- Fixed the reveal-button popover only opening once on mobile. Closing it left the reveal button marked as open, so the next tap toggled it shut instead of reopening.
- Replaced every jQuery
.show()and.hide()call with direct style writes. jQuery measures the document to work out a default display value, which forced a layout on each call, and two of these were running once per search suggestion. - Switched the hide ajax results on scroll option from a scroll listener to an
IntersectionObserver. The old version measured the results panel on every scroll event. The panel now hides once it has fully scrolled off the top rather than when its top edge passes 100px, so it stays on screen slightly longer. - Fixed
0 never matched.width:100vw plus side padding without box-sizing:border-box pushed the close button and part of the search box off the right edge, so the close button could not be tapped on a narrow phone.ssstext element id as the inline search box on the same page.