About this plugin
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
)
– 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
0+ compatibility
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
0-or-later.
Copyright (c) Pickory