Pickory Product Filter
Pickory Product Filter is a WooCommerce filtering solution designed for performance, scalability, and flexibility. Pickory uses a flat product index for optimized filtering even on stores with 10,000+ products.
Why Pickory Product Filter?
Pickory uses a denormalized index table that stores the fields most commonly used for filtering in a single, optimized database table.
Key Features
Performance & Scalability: – Flat product index for fast filtering (no expensive postmeta scans) – Object cache integration (Redis/Memcached support) – Query response caching for logged-out users – REST API-based filtering with abortable requests – Debounced inputs for price slider and search
Filter Types: – Price range slider (dual-thumb) – Star rating filter – On Sale toggle – Category filter (checkboxes, radio, dropdown, button grid, search list) – Product tags – WooCommerce product attributes (color, size, brand, etc.) – Custom taxonomies – Multiple display types: checkboxes, radio buttons, dropdowns, swatches (color/image), button grids, toggles, search lists
User Experience: – AJAX-powered filtering (no page reload) – URL-addressable filters (shareable, bookmarkable) – Browser back/forward button support – Active filter chips with one-click removal – Multiple filter instances on same page (sidebar + mobile drawer) – Mobile-responsive drawer with smooth animations
Developer Features:
– REST API with comprehensive endpoint
– Shortcode: [pickory_product_filter]
– Gutenberg block support
– WordPress hooks for customization
– Template override system
– ES6 modular JavaScript architecture
Enterprise Compatibility: – HPOS (High-Performance Order Storage) compatible – Multi-currency support – WooCommerce 7.0+ compatibility – PHP 8.0+ optimized – Multisite compatible – Caching plugin friendly
Architecture
Pickory uses a hybrid SSR + CSR architecture:
- Initial Page Load: Server renders filtered products based on URL parameters
- AJAX Filtering: Client sends REST request, receives HTML fragments, updates DOM
- URL Sync: Browser URL updates with filter parameters (no reload)
- State Management: Global state object keeps filters, pagination, and sorting in sync
Developer Documentation
Shortcode Usage
[pickory_product_filter] — Default filter instance
[pickory_product_filter instance_id="custom-id" class="custom-class"] — Custom instance
REST API Endpoint
GET /wp-json/pickory-filter/v1/products
Parameters:
– page (int) — Current page
– per_page (int) — Products per page (max: 100)
– category (string) — Category slugs, comma-separated
– product_tag (string) — Tag slugs, comma-separated
– min_price (float) — Minimum price
– max_price (float) — Maximum price
– rating (float) — Minimum rating (1-5)
– on_sale (string) — "1" for on sale only
– filter_{attribute} (string) — Attribute slugs, comma-separated
– orderby (string) — Sort field
– order (string) — ASC or DESC
– instance_id (string) — Filter instance ID
WordPress Hooks
Filters:
– ppfx_rest_max_per_page — Maximum products per REST request (default: 100)
– ppfx_force_db_rate_limiting — Force rate limiting without object cache
Actions:
– ppfx_before_query_build — Before building WP_Query args
– ppfx_after_query_build — After building WP_Query args
– ppfx_index_sync_product — When syncing product to index
Template Override
Copy files from pickory-product-filter/templates/ to yourtheme/pickory-product-filter/.
CSS Classes
.ppfx-filter-container— Main filter wrapper.ppfx-filter-form— Filter form element.ppfx-products-wrapper— Product grid wrapper.ppfx-active-filters— Active filter chips container.ppfx-mobile-toggle— Mobile drawer toggle button
Privacy & Security
Pickory Product Filter does not collect personal data. It stores product index data and plugin settings only. No data is transmitted to third parties.
License
This plugin is licensed under GPL-2.0-or-later. Copyright (c) Pickory