=== SpeedSearch ===
Contributors: tmmtechnology
Tags: woocommerce, product search, product filter, search, autocomplete
Tested up to: 7.0
Stable tag: 1.8.36
Requires PHP: 8.1
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Speed up WooCommerce search and filtering. Help shoppers find products with autocomplete, flexible filters and a dedicated search backend.

== Description ==

**Help shoppers find the right product faster.**

A growing catalogue should give customers more choice without making products harder to find. SpeedSearch brings dedicated product search, autocomplete and flexible filtering to WooCommerce, helping shoppers move from a search or a category to the products that fit.

Search and filtering run on the SpeedSearch backend, reducing the search workload on your WordPress database. Your store gets a product-discovery interface you can configure in WordPress, with background catalogue synchronization to keep it supplied with updates.

= Give shoppers more ways to find what they want =

* **Search with a head start.** Show suggestions and product results as customers type.
* **Turn a large selection into a useful shortlist.** Filter by category, tag, price and product attributes such as size, colour or material.
* **Put discovery where it belongs.** Place a complete search interface or individual search, filter and results components in your storefront.
* **Keep catalogue changes moving.** Synchronize product and taxonomy updates through background processing, with diagnostics to inspect progress.

= Give WooCommerce search its own engine =

Search and filtering can ask a lot of a store's database, particularly as its catalogue and filter combinations grow. SpeedSearch synchronizes catalogue data with a dedicated service that finds matching products and processes filters.

This separates those operations from your store's main WordPress database. It is designed to improve product discovery; actual speed depends on your catalogue, hosting, network, theme and configuration.

= Help both focused shoppers and browsers =

Some customers arrive with a product in mind. Others start with a category, a budget or a preferred colour. Autocomplete supports the first group; product filters help the second narrow down the options.

Configure the autocomplete presentation and selection behaviour, then choose filters that reflect how people shop your catalogue. Attribute filters use the supported attributes configured on your WooCommerce products.

= Fit search into your storefront =

Use shortcodes for the full interface or for individual search, filter, category and product-results components. SpeedSearch also includes integrations for Flatsome and its UX Builder.

Adjust the layout and behaviour in WordPress, then check the result with your theme and product templates. You can build around the way your shop presents its products.

= See what shoppers are searching for =

Search analytics can help you review popular search terms and searches without results. Use those insights to investigate gaps in product naming, catalogue coverage or navigation.

= Connect your catalogue and get started =

SpeedSearch requires access to the SpeedSearch backend service, store authorization and an initial catalogue synchronization. Installing the plugin alone does not provide service access.

Visit [SpeedSearch](https://speedsearch.io/) to learn about the service, review the [available plans](https://speedsearch.io/pricing/), or contact wp@tmm.ventures for setup assistance. Paid plans are separate from the plugin download.

== Installation ==

= Requirements =

* WordPress with WooCommerce installed and activated.
* PHP 8.1 or newer, with curl, dom, json, libxml and mbstring.
* Access to the SpeedSearch backend service.
* Working WordPress background processing for catalogue synchronization.

= Set up your first product search =

1. Install and activate SpeedSearch alongside WooCommerce. Use a staging copy to check your theme integration first.
2. Open the SpeedSearch administration pages and connect and authorize your store. Contact support if you need service access.
3. Allow the initial catalogue synchronization to complete.
4. Choose the search interface and filters that suit your catalogue.
5. Add the interface using the available shortcodes or supported theme integration.
6. Search for a known product, combine a few filters and follow a product link. Check the experience on desktop and mobile before enabling it for customers.

If products do not appear, check the service connection, synchronization diagnostics and scheduled background tasks.

Screenshots show example catalogues and an earlier interface; appearance and available controls depend on the theme, settings and version.

== Frequently Asked Questions ==

= How does SpeedSearch help speed up WooCommerce? =

SpeedSearch uses a dedicated backend to find matching products and process filters, reducing reliance on WordPress database queries for those operations. The improvement depends on your store and configuration.

SpeedSearch focuses on product discovery. It does not optimize unrelated checkout, payment or administration operations.

= Does SpeedSearch work without an external service? =

No. Backend-powered search and filtering require a connection to the SpeedSearch service, store authorization and a synchronized catalogue. Installing the plugin alone does not provide service access.

= Can I filter products by colour, size or material? =

Yes, when those values are configured as supported WooCommerce product attributes. You can also use category, tag and price filters.

= Does it include autocomplete? =

Yes. SpeedSearch can display suggestions as customers type, with settings for autocomplete presentation and behaviour.

= Can I choose where the search field and filters appear? =

Yes. Use the complete interface or individual shortcode components. The plugin also includes Flatsome and UX Builder integrations.

= Will it work with my theme? =

Compatibility depends on your theme and any custom product templates or search modifications. Test the integration on staging, especially if another plugin or theme already replaces WooCommerce search or filtering.

= How do product changes reach the search results? =

The plugin captures catalogue changes and synchronizes them with the backend through background processing. Changes become searchable after the relevant synchronization and backend processing have completed.

= Why is a product update not visible immediately? =

Check whether background processing is running and whether synchronization has completed. Publishing an update from WordPress and processing it in the backend are separate steps. Use the plugin's diagnostics to inspect the current state.

= Does SpeedSearch replace my caching plugin? =

No. Page caching and dedicated product search address different workloads. Test them together as part of your store's configuration.

= Where can I get help? =

Open a topic in the [WordPress.org support forum](https://wordpress.org/support/plugin/speedsearch/) or email wp@tmm.ventures.

Include your WordPress, WooCommerce and SpeedSearch versions, the affected workflow and steps to reproduce the problem. Redact credentials, authentication tokens and private customer information before sharing logs or diagnostics.

== External Services ==

= SpeedSearch backend =

The plugin connects to the SpeedSearch service to authorize the store, synchronize its catalogue and settings, and process search, autocomplete and filtering requests. The default backend address is https://saffy.speedsearchpro.com; deployments can configure a different address.

Data exchanged includes product and taxonomy information, store settings, search and filter parameters, the store domain, plugin version and service authentication details. During authorization, the plugin also sends the activating administrator's name and email address as the store contact. Background analytics delivery sends per-product view, add-to-cart and purchase counters.

These requests occur during store connection, catalogue and settings synchronization, search operations and scheduled analytics delivery. Diagnostic and settings-sharing operations also communicate with the backend when used.

Service information: https://speedsearch.io/
For service access, terms and privacy information, contact wp@tmm.ventures.

= Tawk.to live chat =

SpeedSearch loads Tawk.to's chat widget in its administration interface to provide support. Loading the widget connects the administrator's browser to Tawk.to, exposing connection information such as the IP address and browser details. Information entered into the chat is sent to Tawk.to.

[Privacy policy](https://www.tawk.to/privacy-policy/) | [Terms of service](https://www.tawk.to/terms-of-service/)

== Screenshots ==

1. Product discovery interface with search, categories, active filters and a product grid.
2. Date-range selection in the storefront filter interface.
3. Autocomplete combining search suggestions and matching product cards.
4. Storefront example with category, price and product-attribute filters beside the catalogue.
5. Storefront autocomplete example with suggestions and grouped results.
6. Search analytics showing popular queries, searches without results and viewed products.
7. Theme integration settings for the search interface.
8. Filter layout configuration with horizontal and vertical previews.
9. Theme integration controls for product blocks.
10. Tag display and selection settings.
11. General display settings for categories, attributes and archive filters.
12. Autocomplete settings for suggestions, panels and selection behaviour.
13. Category selection and URL configuration.
14. Pagination and product ordering settings.
15. Advanced indexing, webhook and diagnostic controls in an earlier interface.
16. Cache and maintenance controls in an earlier interface; available controls vary by version.

== Changelog ==

= 1.8.36 2026-10-30 =

#### Bugfixes

* Prevent failed notification requests from creating immediate retry loops with WP Plugins Core 0.1.58; retain bounded retries and interrupted-worker recovery.
* Avoid repeatedly flushing rewrite rules when the saved shop page ID is a string.
* Remove dynamic and legacy plugin options during uninstall.

= 1.8.35 2026-10-22 =
* Synchronize feed contents, recovery copies and directory changes before acknowledging publication, retaining pending data when synchronization fails.
* Repeat persistence checks during crash recovery and lost rename acknowledgements while preserving protocol-1 feed compatibility.
* Require PHP 8.1 or newer for native file synchronization and expose the durability policy in feed diagnostics.

= 1.8.34 2026-10-22 =
* Remove completed database-feed migration and cleanup helpers while preserving uploads feeds, queues and recovery data.
* Simplify feed diagnostics and retain a safe upgrade check requiring existing installations to complete cleanup with 1.8.33 first.

= 1.8.33 2026-10-20 =
* Continue pending uploads publication in bounded immediate batches after native scheduler completion, keeping the recurring recovery fallback and preventing duplicate continuation jobs.

= 1.8.32 2026-10-20 =
* Repair historical uploads-feed ordering with verified recovery copies, preserve every record and pending update, and resume protocol-1 publication without regeneration.
* Continue rejecting duplicate or misplaced feed indexes and identify the offending file, line and index in the error.

= 1.8.31 2026-10-20 =
* Remove the retired database-feed runtime and migration workers after the protocol-1 transition.
* Remove obsolete snapshot tables and migration data in guarded, resumable batches while retaining active uploads feeds, queues and recovery data.
* Report cleanup progress in diagnostics and refuse unfinished transitions until the 1.8.30 bridge has completed.

= 1.8.30 2026-10-20 =
* Coalesce ordinary product-save updates into one final snapshot per product per request, with durable retry intent and recovery after interrupted requests.
* Keep concurrent save requests independent and prevent recovery from acknowledging a save before its later metadata updates finish.
* Exclude local admission timestamps from feed payloads and hashes to avoid redundant records while preserving real product metadata.
* Remove deferred feed tickets, cursors and import markers on uninstall; retain pending work on deactivation.

= 1.8.29 2026-10-19 =
* Standardize feed communication on protocol 1 and uploads-based JSONL files. Existing uploads installations retain their feeds without conversion.
* Migrate existing database feeds in resumable batches, require an exact backend acknowledgement before switching, and retain original data and recovery copies. Requires the compatible Saffy backend deployment first.
* Coordinate shared uploads writers and recover interrupted publication, regeneration and pending product or taxonomy updates.
* Remove operational protocol 2 endpoints and snapshot publication controls; expose migration and recovery progress in feed diagnostics.

= 1.8.28 2026-10-14 =
* Keep the uploads feed's next index and shard hashes in the database, so publishing no longer re-reads and rehashes the whole feed while holding the shared lock. The first publication after upgrading builds this state once.

= 1.8.27 2026-10-14 =
* Defer product and saved-term feed updates to a background worker while the shared feed lock is busy, instead of failing the WooCommerce write that triggered them.

= 1.8.26 2026-10-13 =
* Preserve uploads-based protocol 1 feeds on upgrades from 1.8.20; skip the database-feed import for those installations.
* Keep existing database-feed installations on protocol 2.
* Retain file generations and interrupted-import data, with retryable uploads publication through the existing protocol 1 backend endpoints.
* Report the selected storage mode and skipped data import in feed diagnostics.

= 1.8.25 2026-10-13 =

* Add administrator-only feed diagnostics covering migration checkpoints, protocol acknowledgement, generation and snapshot identities, receipt matching, pending records, retry queues and storage health.
* Include the report in Show debug data and offer a bounded JSON report, including a link while migration is in progress. Keep credentials and product payloads out of the new report and report unavailable metadata without hiding other progress.

= 1.8.24 2026-10-13 =
* Preserve immutable database feed snapshots across regeneration retries and table swaps.
* Require a matching backend generation receipt before activating a replacement feed, including empty catalogues.
* Synchronize the database feed URL and protocol with the backend; retain sources when handoff fails.

= 1.8.23 2026-10-12 =

#### Bugfixes

* Migrate legacy feeds in bounded, resumable batches during normal requests without loading whole shards into memory.
* Preserve original files and database recovery copies, resume interrupted imports, and restore feed records left hidden by earlier failed upgrades.
* Keep migration progress transactional and refuse conflicting pending work instead of silently overwriting it.

= 1.8.22 2026-10-11 =

#### Bugfixes

* Preserve published feed data and retryable catalogue work across interrupted generation and upgrades.
* Harden scheduler admission, recovery, cache invalidation, and frontend rendering against failed operations.

= 1.8.21 2026-09-04 =

#### Improvements

* Make feed generation, pruning, product markup caching, JSON cache settings, and generated script delivery safe across interchangeable load-balanced web nodes by using shared database storage.
* Preserve existing feed history during upgrades and expose the unchanged JSONL manifest/shard protocol through a database-backed public endpoint.
* Serialize feed generation transitions and make plugin option reads independent of node-local persistent object-cache state.
* Remove the legacy product HTML cache (its per-product ID list and cache files) on upgrade, and keep the Advanced diagnostics bounded on large catalogs: they report the cache entry count and pending Action Scheduler count, listing at most 100 pending action IDs, instead of loading every ID.

= 1.8.20 2026-08-24 =

#### Bugfixes

* Restore YITH Wishlist buttons after dynamic Flatsome product updates without repeatedly initializing YITH's global handlers.

= 1.8.19 2026-08-24 =

#### Bugfixes

* Prevent repeated YITH Wishlist initialization and fragment reloads after SpeedSearch updates Flatsome product results.

= 1.8.18 2026-08-11 =

#### Improvements

* Decouple Q Search result rendering from Flatsome with a theme-neutral fallback and a dedicated Flatsome override.
* Align Q Search and standard fallback product cards with a responsive, plugin-owned grid and consistent presentation.
* Clarify the Q Search mode labels and descriptions in the plugin settings.

#### Bugfixes

* Keep Q Search product containers isolated from the standard product renderer so paginated products continue to appear.
* Prevent legacy theme floats and clearfix rules from creating incomplete fallback product rows.

= 1.8.17 2026-08-10 =

#### Improvements

* Add configurable unified search modes using the backend `/q` endpoint for taxonomy and product results.
* Render category, tag, and attribute results with theme-compatible cards and cached representative product-image mosaics.

= 1.8.16 2026-08-03 =

#### Improvements

* Synchronize stable store settings to the SpeedSearch backend when they change.

= 1.8.15 2026-07-22 =

#### Improvements

* Add an authenticated REST API endpoint to replay a product's latest data into the feed buffer.

= 1.8.14 2026-07-22 =

#### Bugfixes

* Persist every observed product state immediately so stock feed updates do not depend on PHP reaching shutdown.
* Cover stock changes from WooCommerce CRUD, atomic stock operations, orders, refunds, and direct stock metadata updates while suppressing exact payload duplicates.

= 1.8.13 2026-07-20 =

#### Bugfixes

* Serialize product updates from their final saved state and prevent duplicate feed-buffer rows from overlapping WooCommerce hooks.

= 1.8.12 2026-07-16 =

#### Improvements

* Add admin-only rendering diagnostics to search responses requested with `speedsearchDebug=1`.

#### Bugfixes

* Clear cached product markup after plugin updates so theme integration changes take effect immediately.

= 1.8.11 2026-07-16 =

#### Bugfixes

* Render out-of-stock products with the standard theme integration markup.

= 1.8.10 2026-07-05 =

#### Bugfixes

* Fix pagination skipping several pages per click.

= 1.8.9 2026-07-03 =

#### Bugfixes

* Fix "_load_textdomain_just_in_time was called incorrectly" notice for the `tmm-wp-plugins-core` domain by updating the core library (translations now load on the `init` hook, as required since WP 6.7).

= 1.8.8 2026-05-20 =

#### Improvements

* Improve SpeedSearch Diagnostics for prune feed files by listing problem feed files with owner, group, permissions, readability, writability, and open errors.
* Make prune feed file failures easier to investigate when files are readable but not writable by the PHP/WP-CLI process.

= 1.8.7 2026-05-19 =

#### Improvements

* Add the Diagnostics submenu.

= 1.8.6 2025-12-05 =

#### Bugfixes

* Fix the feed flush bug that we used COUNT(*) and feed index broke on feed buffer cleanup, so now we should use index.

= 1.8.5 2025-11-30 =

#### Bugfixes

* Fix the bug.

= 1.8.4 2025-11-30 =

#### Bugfixes

* Fix the bug.

= 1.8.3 2025-11-30 =

#### Optimizations

* Add the interval to delete feed_buffer with irrelevant records (written, older than 7 days)

= 1.8.2 2025-11-29 =

#### Optimizations

* Optimize feed generation buffer hash regeneration checks by querying for specific IDs instead of fetching all IDs, reducing query time from seconds to milliseconds for large stores.

= 1.8.1 2025-11-21 =

#### Bugfixes

* Fix pagination event listener duplication causing page skipping when navigating with browser back button.

= 1.8.0 2025-04-23 =

#### Bugfixes

* Fix characters encoding bug.

= 1.7.99 2025-04-19 =

#### Bugfixes

* Fix autocomplete bug.

= 1.7.98 2025-03-07 =

#### Bugfixes

* Fix wrong characters encoding.

= 1.7.97 2025-02-16 =

#### Bugfixes

* Searching for '&klevering' fails.
* When pruning, do not remove the line, only the content.
* The column type of the object_id is varchar instead of int, making mysql ignore the index.

= 1.7.96 2025-01-26 =

#### Enhancements

* Delete debug assets.
* Improved URL logic (redirect to a new URL).

= 1.7.95 2025-01-25 =

#### Enhancements

* Delete debug assets.

= 1.7.94 2024-12-18 =

* Fix export .json extension.

= 1.7.93 2024-12-18 =

#### Enhancements

* Option default value fix.

= 1.7.92 2024-12-18 =

#### Enhancements

* New modal popups logic (make autocomplete a child of body and use different style for it).
* Add a setting to open filters on hover.
* Add a setting to add "All" term to the attribute term filter.
* Add a setting to hide filters top.
* Add a setting to hide filters bottom.
* Add a setting to set custom autocomplete input placeholder.
* Add a setting to set custom open mobile filters text.

= 1.7.91 2024-12-18  =

#### Enhancements

* Add "thegem" theme integration.

= 1.7.90 2024-12-08  =

#### Enhancements

* Restore license activation logic.

= 1.7.89 2024-12-08  =

#### Enhancements

* Return hashes check back.
* Optimize more queries.

= 1.7.88 2024-12-05  =

#### Enhancements

* Optimize queries.

= 1.7.87 2024-11-04 =

#### Enhancements

* Add a setting to open filters on hover.

= 1.7.86 2024-09-26  =

#### Bugfixes

* Improved feed regen.

= 1.7.85 2024-09-07 =

#### Enhancements

* Improved scripts.

= 1.7.84 2024-08-26 =

#### Bugfixes

* Fix feed regen bug.

= 1.7.83 2024-08-16 =

#### Bugfixes

* Fix feed regen.

= 1.7.82 2024-08-08 =

#### Optimizations

* Add indexes for 'opened' and 'written'.
* Remove unnecessary whitespace of html in functions.js.

= 1.7.81 2024-07-28 =

#### Enhancements

* Remove unnecessary migrations.

= 1.7.80 2024-07-26 =

#### Bugfixes

* Revert frontend JS to the old version (but keep feed regen logic the same) (essentially, revert FE JS to 1.7.54).

= 1.7.79 2024-07-20 =

#### Bugfixes

* Improved feed gen logic.

= 1.7.78 2024-07-20 =

#### Bugfixes

* Improved feed gen logic.

= 1.7.78 2024-07-20 =

#### Bugfixes

* Improved feed gen logic.

= 1.7.77 2024-07-20 =

#### Enhancements

* Add a bit more debug data.

= 1.7.76 2024-07-16 =

#### Bugfixes

* Improved feed gen logic.

= 1.7.75 2024-07-07 =

#### Bugfixes

* Fix feed buffer flush.

= 1.7.74 2024-07-07 =

#### Enhancements

* Add feed buffer flush AJAX action.

= 1.7.73 2024-07-07 =

#### Enhancements

* New feed generation logic.

= 1.7.72 2024-07-07 =

#### Enhancements

* Use 'speedsearch-warmer' header instead of cookie.
* New feed generation logic.

= 1.7.71 2024-06-25 =

#### Enhancements

* Add attribute data filter.

= 1.7.70 2024-06-25 =

#### Enhancements

* Autocomplete attribute skip filter.

= 1.7.69 2024-06-25 =

#### Enhancements

* Add response body filter.

= 1.7.68 2024-06-25 =

#### Enhancements

* Add request params filter.

= 1.7.67 2024-06-22 =

#### Enhancements

* Some logic has been improved.

= 1.7.66 2024-06-22 =

#### Enhancements

* Some logic has been improved.

= 1.7.64 2024-06-11 =

#### Enhancements

* New feed generation logic.

= 1.7.62 2024-06-08 =

#### Bugfixes

* Fix autocomplete window.

#### Enhancements

* Also reset the 'text' field.

= 1.7.61 2024-06-01 =

#### Bugfixes

* Improve the debug data.

= 1.7.60 2024-05-30 =

#### Enhancements

* New feed generation logic.

= 1.7.59 2024-05-28 =

#### Enhancements

* New feed generation logic.

= 1.7.56 2024-05-13 =

#### Enhancements

* Add written_at columns for feed buffer rows, for debug.
* Remove blur on filters change (posts loading), and instead just delete all products (for a previous filters set).

= 1.7.55 2024-05-12 =

#### Enhancements

* Break out of category archive.

#### Bugfixes

* Do not make filtering requests for hidden filters.
* When autofocusing on a different search input, close the previous one.
* The autocomplete dropdown is a child of the search bar, and can have a display issue when one of the parents has a z-index (move autocomplete search container to the body).

= 1.7.54 2024-05-03 =

#### Enhancements

* Move actions scheduling to constructors.

= 1.7.53 2024-05-02 =

#### Enhancements

* Update WP-Plugins-Core.

= 1.7.52 2024-04-25 =

#### Bugfixes

* Fix post trash webhook.

= 1.7.51 2024-04-25 =

#### Bugfixes

* New feed logic.

= 1.7.50 2024-04-24 =

#### Bugfixes

* Set unique = true for actions wherever possible.

= 1.7.49 2024-04-18 =

#### Bugfixes

* Fix products feed gen.
* Add extra feed debug data.

= 1.7.48 2024-04-15 =

#### Bugfixes

* When loading from the HTML cache, variations do not swap the product image on hover.
* Filters can't be opened during the initial loading (when listeners are added).

= 1.7.47 2024-04-12 =

#### Bugfixes

* Fix the styling.

= 1.7.46 2024-04-05 =

#### Bugfixes

* When no alt for autocomplete search (and the setting is set), use product title.

= 1.7.45 2024-04-03 =

#### Bugfixes

* Fix the feed.

= 1.7.44 2024-03-27 =

#### Bugfixes

* Cannot save Customizer.

= 1.7.43 2024-03-15 =

#### Bugfixes

* Cannot save Appearance options.
* postsUpdate pageTop is not present().

= 1.7.42 2024-03-08 =

#### Enhancements

* Reduce unnecessary migrations.

= 1.7.41 2024-03-07 =

#### Enhancements

* Reduce the chance of duplicate intervals.

= 1.7.40 2024-03-03 =

#### Enhancements

* Add a logic to not add duplicates to the feed.

= 1.7.39 2024-02-27 =

#### Enhancements

* Use getElementsByClassName instead of querySelectorAll.
* Use getElementsByClassName instead of querySelectorAll when possible.
* Optimized handling of unique product IDs to improve performance and prevent duplicates using associative arrays.

= 1.7.38 2024-02-16 =

#### Enhancements

* Clear html cache on site wide / theme setting change

#### Bugfixes

* Tags are in filter terms when doing filtering.
* When selecting the text in autocomplete, the result is not retained.
* Do not clear the autocomplete text on enter press.

= 1.7.37 2024-02-14 =

#### Bugfixes

* Fix function.js

= 1.7.36 2024-02-14 =

#### Enhancements

* Wrap all fetch in catch.
* Errors should reject.
* Disable running actions on plugin deactivation when possible.
* Disable document body scroll when mobile menu is opened.

#### Bugfixes

* Bug: On filter select, preserve the currently selected filters (instead of resetting them) - doesn't work when adding to text a category.
* Fix autocomplete select bug.

= 1.7.35 2024-02-10 =

#### Bugfixes

* "speedsearch.updatePosts 'pageTop' is called before json-cache-settings-retrieval.js added to the page".
* Gutenberg styling support, and add 2024 theme.

= 1.7.34 2024-02-09 =

#### Bugfixes

* Fix progress bar.

= 1.7.33 2024-02-08 =

#### Bugfixes

* Fix progress bar.

= 1.7.32 2024-02-07 =

#### Enhancements

* Remove unnecessary queries.

= 1.7.31 2024-02-07 =

#### Dev changes

* Enable /sync/status back.

= 1.7.30 2024-02-06 =

#### Bugfixes

* Fix clicking "Reset all filters" crashes the page.
* Do not infinity update posts on error response.

#### Dev changes

* Temporarily disable /sync/status endpoint.

= 1.7.29 2024-02-06 =

#### Bugfixes

* Fix undefined "invalid products" variable.

= 1.7.28 2024-02-04 =

#### Bugfixes

* Fix the request params cache.

= 1.7.27 2024-02-03 =

#### Enhancements

* New progress tracking logic.

= 1.7.26 2024-02-02 =

#### Bugfixes

* Fix the minor JS posts rendering bug.

= 1.7.25 2024-01-31 =

#### Enhancements

* Use speedsearch DB table for product.deleted retention instead of an option.

= 1.7.24 2024-01-25 =

#### Enhancements

* Revert feed back to the JSONL format (and regenerate it).

= 1.7.22 2024-01-22 =

#### Enhancements

* Render the UI correctly on server errors (response code != 200).

= 1.7.21 2024-01-22 =

#### Enhancements

* Revert feed back to the CSV format.
* Improved console output debug (for more endpoints).

#### Bugfixes

* Fix often update_indexes() call.

= 1.7.19 2024-01-16 =

#### Enhancements

* Revert feed back to the CSV format (temporarily).

= 1.7.17 2024-01-10 =

#### Bugfixes

* Fix YITH wishlist bug when makes too many AJAX requests at once.

= 1.7.15 2024-01-10 =

#### Enhancements

* When noPosts for the current chunk, add some notice like "Couldn't get posts for the current page. Please try again later".

= 1.7.14 2024-01-09 =

#### Bugfixes

* Fix a bug when speedsearch.postsData returns no products but just HTML wrapper, and that causes postsUpdate infinity loop.

= 1.7.13 2024-01-09 =

#### Enhancements

* Add indexeddb key for autoload.
* Add delete rows on initial feed gen.
* No cache for 'no posts' results.
* Feed: Use sha1 for hashes (not md5).

#### Bugfixes

* Eliminate JS error (undefined function call).
* E_DEPRECATED (parse_str(): Passing null to parameter #1 ($string) of type string is deprecated) in file /src/integrations/plugins/wordpress-seo.php on line 29
* Feed hooks: wp_trash_post does product.restored now; no duplicate product.deleted anymore.

= 1.7.12 2024-01-06 =

#### Enhancements

* New feed generation logic (with index file and jsonl format).

= 1.7.11 2023-12-29 =

#### Enhancements

* Fix search button overlap.

= 1.7.11 2023-12-29 =

#### Enhancements

* Use microtime for feed hashes.

= 1.7.9 2023-12-25 =

#### Enhancements

* New feed format (json instead of csv).

= 1.7.8 2023-12-19 =

#### Enhancements

* Make speedsearch.getPostDebugData() to return instead of printing.
* Fix a bug with a lot of theme integration calls (speedsearch.hookAFuncAfterThePostsAddition()) when no posts were added.
* Limit posts decrease loop up to the max number the page is expected to have (find a better solution later).

= 1.7.7 2023-12-15 =

#### Enhancements

* Use DB table as a buffer.

= 1.7.6 2023-12-12 =

#### Enhancements

* Add option-based buffer for feed generation.

= 1.7.5 2023-12-12 =

#### Enhancements

* Autoload most important cache from IDB into memory.
* Make the soundex warning unclickable (was searching for the correction previously).

#### Bugfixes

* Fix an error when the toggle container was hidden, and you get the error.
* Fix autocomplete rendering when for 'text' it was not active.
* Fix previous & next pagination.
* Make autocomplete to wait for results before making a search when the Enter was pressed.
* Revert feed generation to be without locking mechanism logic.

= 1.7.3 2023-11-22 =

#### Enhancements

* Export IDB cache to local variable.

#### Bugfixes

* Mark eligible event listeners as passive.
* Fix mobile menu overlap.

= 1.7.2 2023-11-17 =

#### Bugfixes

* Fix a bug when clicking reset filters from an archive page when the archive got no results the site crashes.

= 1.7.1 2023-11-16 =

#### Bugfixes

* Fix querySelectorAll on body error.

= 1.7.0 2023-11-13 =

#### Bugfixes

* Add a centralized lock for the feed generation, to avoid race conditions (and therefore duplicate indexes).

= 1.6.99 2023-11-13 =

#### Bugfixes

* Avoid using querySelectorAll on document.

= 1.6.98 2023-11-12 =

#### Bugfixes

* Fix the lack of placeholders on non-shop pages.
* Use the correct URL for categories and tags inside of archives.

= 1.6.97 2023-11-10 =

#### Bugfixes

* Fix rewrite rules.

= 1.6.96 2023-11-09 =

#### Bugfixes

* Fix IDB cache cleanup (retain initial-posts-html).

= 1.6.95 2023-11-06 =

#### Bugfixes

* If you select child category within the pare_nt (and the parent is enabled) = select child category, even when the setting "select multiple categories" is on.
* Delete a dot from Math.random() to avoid confusing caching intermediates.
* Rename "0 seconds" to "Served from cache".
* Many other mini fixes.

= 1.6.94 2023-10-14 =

#### Bugfixes

* Enable idb cache (a bit improved).

= 1.6.93 2023-10-13 =

#### Bugfixes

* Temporarily disable idb cache to see if that helps to eliminate Chrome + Win crash.

= 1.6.92 2023-10-13 =

#### Bugfixes

* Delete "autoload" from IDB table as it's not used and unnecessary overcomplicated the logic.

= 1.6.91 2023-10-13 =

#### Bugfixes

* Get rid of 'Failed to initialize plugin: speedsearch_add_shortcodes' error for TinyMCE plugin.

= 1.6.90 2023-10-11 =

#### Bugfixes

* Mobile menu z-index fix.

= 1.6.89 2023-10-11 =

#### Bugfixes

* Fix feed regeneration, to add attributes data before the terms.

= 1.6.88 2023-10-10 =

#### Bugfixes

* Fix feed regeneration, to create from 0.csv (and not from 1.csv).

= 1.6.87 2023-10-08 =

#### Bugfixes

* Fix IDB.

= 1.6.86 2023-10-08 =

#### Enhancements

* Do not show in preview variations without thumbnails.
* Improve (optimize) IDB logic.

#### Bugfixes

* Get rid of 'Failed to initialize plugin: speedsearch_add_shortcodes' error for TinyMCE plugin.
* Fix an error when tag ID cannot be converted into a slug, and the page crashes.
* Fix an issue when couldn't preview products.
* Align to the "center" the error image.
* Fix the issue when the placeholders posts were not deleted after the "No filters match your filters" error was displayed.

= 1.6.85 2023-09-29 =

#### Enhancements

* Cache flush - also flush HTML cache (in files and object cache) on the interval.

#### Bugfixes

* Fix feed generation (to have max 1k of lines per file).

= 1.6.84 2023-09-23 =

#### Bugfixes

* Improve the categories and tags archive URLs.

= 1.6.83 2023-09-22 =

#### Bugfixes

* Use category and tag archive link instead of "?categories" and "?tags" for links HTML.
* Fix a console error for active filters block on tag archive page.
* Hide "speedsearch-ul-container" when all of its children are hidden

= 1.6.80 2023-08-31 =

#### Bugfixes

* Fix IndexedDB cache expiration.

= 1.6.79 2023-08-31 =

#### Bugfixes

* Feed regeneration fix.

= 1.6.78 2023-08-29 =

#### Enhancements

* Add Equipo theme integration.

= 1.6.77 2023-08-26 =

#### Enhancements

* Add product tags, categories, and terms to the feed on the initial generation.

= 1.6.72 2023-08-25 =

#### Bugfixes

* Fix feed generation.

= 1.6.71 2023-08-21 =

#### Bugfixes

* Fix feed generation.

= 1.6.68 2023-08-13 =

#### Enhancements

* Improve posts container classes fetch reliability.

= 1.6.67 2023-08-11 =

#### Enhancements

* Improve hashes and feed generation by getting posts by batches, and not by one; and by decreasing batch size from 100 to 25.

#### Bugfixes

* Fix a bug of different hashes are being generation for variable products every time by deleting 'related_ids' from the product data.
* Fix SpeedSearch shortcodes block initialization.

= 1.6.66 2023-08-10 =

#### Bugfixes

* Fix tabs content style.

= 1.6.65 2023-08-09 =

#### Enhancements

* Add margin to the posts' container.

= 1.6.64 2023-08-09 =

#### Bugfixes

* Fix recently viewed products HTML block.

= 1.6.63 2023-08-09 =

#### Enhancements

* Use WooCommerce-like tabs.
* Reorganize settings in 4 categories and move the menu to the top.

#### Bugfixes

* Fix filesystem init by getting it from the global variable, instead of declaring Filesystem Direct class in the code.

= 1.6.61 2023-08-07 =

#### Bugfixes

* Fix migrations.

= 1.6.60 2023-08-02 =

#### Enhancements

* When in categories or tags archive, show them in autocomplete, and on click redirect to the other archive (like for terms)

#### Bugfixes

* Migration fix.

= 1.6.59 2023-08-01 =

#### Bugfixes

* Migrations fix.

= 1.6.58 2023-07-27 =

#### Enhancements

* MUCH better themes support (tested on Astra, Storefront, Flatsome (without integrations)).
* Use the same tags for posts container as they are in template (and calculate child product container tag based on this).
* Add a is_file() check for MU-plugin for AJAX optimization, to produce less admin panel warnings.

#### Bugfixes

* Add correct classes to the posts container of recently viewed products.
* Add correct classes to recently viewed products container.
* Fix a bug when bodyClasses() returned an object, and not an array.

= 1.6.57 2023-07-27 =

#### Bugfixes

* Fix missing ranges bug.
* Add z-index to mobile menu button, so it's not overlapped by anything.

= 1.6.53 2023-07-26 =

#### Enhancements

* Use wp_options table instead of cache for the lock of migrations.

#### Bugfixes

* Posts loading fix.
* Filters opening for Safari fix.

= 1.6.51 2023-07-21 =

* Hashes generation fix.

= 1.6.48 2023-07-21 =

#### Bugfixes

* Fix products hash generation logic (include meta within).

= 1.6.46 2023-07-21 =

#### Bugfixes

* Fix pagination container alignment.
* Fix cache validation by removing "first" and ""last" classes from products classes.
* Fix no-integration posts classes.

= 1.6.45 2023-07-20 =

#### Enhancements

* Add files-based HTML cache.

#### Bugfixes

* Fix cache validation.
* Fix a bug when autocomplete tag select from non-shop page lead to "tags=false".
* Fix posts container width (make it 100%).
* Extra categories are added to request params.
* Clearing filters does not clear search input.

= 1.6.44 2023-07-18 =

#### Enhancements

* Delete REST API credentials creation logic, as it's not needed anymore.
* Add a setting to hide particular filters when no filters are selected (active).
* Set min PHP version to 7.4.

#### Tech Changes

* Delete Self_REST_Requests and WC_REST_API_Credentials classes.
* New hashes generation logic using feed data (not self REST-API requests).
* Check for unclosed container element in loop start.

= 1.6.41 2023-07-16 =

#### Enhancements

* Add a notice when the plugin is being updated instead of blocking the whole logic.

= 1.6.39 2023-07-14 =

#### Enhancements

* When “text” url param is applied, all global search results bars are cleaned.

= 1.6.38 2023-07-13 =

#### Enhancements

* Use posts container classes from WooCommerce (and therefore tha layout).

= 1.6.36 2023-07-11 =

#### Enhancements

* Show "0 seconds" instead of "served from cache".

#### Bugfixes

* Improve Yoast SEO "canonical" integration by adding a correct URL to rel="next" and "prev", along with the standard "canonical".
* Fix duplicate WooCommerce initialization.
* Do not delete "page" URL param on the admin dashboard.

= 1.6.34 2023-07-10 =

#### Bugfixes

* Fix autocomplete to render right panel when paginating down.
* Now categories, tags and attribute terms filtering considers "text" param.

= 1.6.33 2023-07-06 =

#### Bugfixes

* Remove <br> from names.
* Fix a bug with the posts being stuck.
* Fix a theme-specific bug when toggles deselect didn't work.

= 1.6.30 2023-07-05 =

#### Bugfixes

* Function is missing bug on plugin deactivation.

= 1.6.29 2023-07-05 =

#### Enhancements

* Add "onerror" as image attribute instead of a separate JS.
* Add admin notice when the theme is outdated.
* Add time to find results.
* Add the shortcodes to the shortcodes dropdown in the editor.

#### Bugfixes

* Size of search box fixed.

= 1.6.28 2023-07-01 =

#### Bugfixes

* Hide placeholder when no input value for search box.

= 1.6.27 2023-07-01 =

#### Bugfixes

* Fix fancy URLs by encoding/decoding URI components.

= 1.6.23 2023-06-30 =

#### Bugfixes

* Fix a bug when WC "takes over" by deleting has_posts() check from the template.

= 1.6.21 2023-06-29 =

#### Bugfixes

* Fix action scheduler scheduling (improve initialization check).

= 1.6.20 2023-06-26 =

#### Enhancements

* Replace failed to load images with placeholder image.

#### Bugfixes

* Fix elements rendering data fetching from cache (now pagination and fullText are retrieved correctly).
* Fix stuck posts bug on fresh refresh.

= 1.6.19 2023-06-24 =

#### Enhancements

* Eliminate CS violations.

= 1.6.18 2023-06-22 =

#### Enhancements

* Improved race conditions prevention logic.

= 1.6.17 2023-06-21 =

#### Enhancements

* Improve breadcrumbs logic to use the correct breadcrumbs separator (add update them only to the shop page).
* Improved updates logic.

#### Bugfixes

* Fix a error on plugin deactivation.

= 1.6.9 2023-06-15 =

#### Enhancements

* Debug improved.

= 1.6.7 2023-06-07 =

#### Enhancements

* Make Recent searches block to open even when no results.

= 1.6.6 2023-06-07 =

#### Bugfixes

* Feed prune fix.

= 1.6.4 2023-06-07 =

#### Bugfixes

* Fix analytics.
* Fix categories archive.

= 1.6.1 2023-06-07 =

#### Bugfixes

* Minor fix.

= 1.6.0 2023-06-07 =

#### Enhancements

* Add Recent searches block.
* Start feed generation on plugin activation.

= 1.5.1 2023-06-03 =

#### Bugfixes

* Fix Intercom script.

= 1.5.0 2023-06-03 =

#### Enhancements

* Version changed to follow SemVer.
* Add correct intercom script.
