{"id":335551,"date":"2026-07-13T14:36:17","date_gmt":"2026-07-13T14:36:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/itg-filter-easy\/"},"modified":"2026-07-13T14:35:52","modified_gmt":"2026-07-13T14:35:52","slug":"itg-filter-easy","status":"publish","type":"plugin","link":"https:\/\/lmo.wordpress.org\/plugins\/itg-filter-easy\/","author":23527219,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.6","stable_tag":"1.7.6","tested":"7.0.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"ITG Filter Easy","header_author":"IT-Gradient","header_description":"WooCommerce product filter Elementor widget. Filters the existing catalog output without page reload via URL params and pre_get_posts.","assets_banners_color":"c61b25","last_updated":"2026-07-13 14:35:52","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/it-gradient.ru\/plaginy\/itg-filter-easy\/","header_author_uri":"https:\/\/it-gradient.ru","rating":0,"author_block_rating":0,"active_installs":0,"downloads":57,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.7.6":{"tag":"1.7.6","author":"itgwp","date":"2026-07-13 14:35:52"}},"upgrade_notice":{"1.2.8":"<p>Added readme.txt for WordPress.org compatibility.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3606226,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3606226,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3606254,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3606254,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.7.6"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Filter widget in a WooCommerce shop page sidebar","2":"Settings \u2014 Structure tab","3":"Settings \u2014 Options tab","4":"Settings \u2014 Help tab"}},"plugin_section":[],"plugin_tags":[221,76538,2236,6033,286],"plugin_category":[45,59],"plugin_contributors":[271370],"plugin_business_model":[],"class_list":["post-335551","plugin","type-plugin","status-publish","hentry","plugin_tags-ajax","plugin_tags-elementor","plugin_tags-filter","plugin_tags-product-filter","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-utilities-and-tools","plugin_contributors-itgwp","plugin_committers-itgwp"],"banners":{"banner":"https:\/\/ps.w.org\/itg-filter-easy\/assets\/banner-772x250.png?rev=3606254","banner_2x":"https:\/\/ps.w.org\/itg-filter-easy\/assets\/banner-1544x500.png?rev=3606254","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/itg-filter-easy\/assets\/icon-128x128.png?rev=3606226","icon_2x":"https:\/\/ps.w.org\/itg-filter-easy\/assets\/icon-256x256.png?rev=3606226","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>ITG Filter Easy is an Elementor widget for WooCommerce product filtering. It works as a <strong>sidebar filter<\/strong> \u2014 it does not output products itself, but modifies the existing WooCommerce Products widget output via URL parameters and <code>pre_get_posts<\/code>, with full <strong>AJAX support<\/strong> (no page reload).<\/p>\n\n<p><strong>Key features:<\/strong><\/p>\n\n<ul>\n<li>Filter by categories, attributes (pa_*), price range, brand, stock status, sale, and text search<\/li>\n<li>AJAX update \u2014 product list refreshes without page reload<\/li>\n<li>Faceted counts \u2014 option counts update after each filter change<\/li>\n<li>Browser history support \u2014 Back \/ Forward navigation works correctly<\/li>\n<li>Brand currency conversion \u2014 prices stored in brand currency are auto-converted to the WooCommerce active currency using a configurable exchange rate feed<\/li>\n<li>Auto-filter mode \u2014 applies filters instantly on change without a submit button<\/li>\n<li>5 translations bundled: Russian, German, French, Spanish, Chinese<\/li>\n<li>16 developer filter hooks<\/li>\n<li>HPOS (High-Performance Order Storage) compatible<\/li>\n<\/ul>\n\n<h3>Configuration<\/h3>\n\n<p>All settings are managed in <strong>WooCommerce \u2192 ITG Filter<\/strong> (not in the widget itself). The widget only exposes the <code>Products selector<\/code> control.<\/p>\n\n<h4>Structure tab<\/h4>\n\n<p>Defines which filters appear in the widget and in what order. Drag rows to reorder.<\/p>\n\n<p>Fields: Attribute, Display type (checkbox \/ radio \/ button \/ select \/ multiselect \/ range), Label, Heading, Open, Count, Sort, \"All\" option, Items, Hint.<\/p>\n\n<p>Built-in filter types: Category, Price, Brand, Sort by, Stock, Sale, Text search. Product attributes (pa_*) are listed automatically.<\/p>\n\n<h4>Options tab<\/h4>\n\n<p>Auto-filter, Hide empty, Shadow under group heading, Show hints, Group icon side, Group icon style, Brand currency, Exchange rate URL.<\/p>\n\n<h4>Advanced tab<\/h4>\n\n<p>Shows the current plugin version and update source URL.<\/p>\n\n<h3>Developer Hooks<\/h3>\n\n<h4>Settings<\/h4>\n\n<ul>\n<li><code>itg_flt_defaults<\/code> \u2014 Override default settings values<\/li>\n<li><code>itg_flt_settings<\/code> \u2014 Filter the full settings array after loading<\/li>\n<\/ul>\n\n<h4>Currency<\/h4>\n\n<ul>\n<li><code>itg_flt_brand_currency<\/code> \u2014 Override the currency code for a brand term<\/li>\n<li><code>itg_flt_pivot_rate<\/code> \u2014 Override the exchange rate for a currency code<\/li>\n<li><code>itg_flt_converted_price<\/code> \u2014 Filter the final converted price<\/li>\n<li><code>itg_flt_convert_price_enabled<\/code> \u2014 Disable price conversion for specific products<\/li>\n<\/ul>\n\n<h4>Query<\/h4>\n\n<ul>\n<li><code>itg_flt_allowed_orderby<\/code> \u2014 Add custom orderby values to the whitelist<\/li>\n<li><code>itg_flt_sanitize_params<\/code> \u2014 Post-process sanitized filter parameters<\/li>\n<li><code>itg_flt_tax_query<\/code> \u2014 Modify tax_query before it is applied to WP_Query<\/li>\n<li><code>itg_flt_meta_query<\/code> \u2014 Modify meta_query before it is applied to WP_Query<\/li>\n<li><code>itg_flt_filtered_counts<\/code> \u2014 Post-process the faceted term counts array<\/li>\n<\/ul>\n\n<h4>AJAX<\/h4>\n\n<ul>\n<li><code>itg_flt_ajax_query_args<\/code> \u2014 Modify WP_Query args before the AJAX product query runs<\/li>\n<li><code>itg_flt_ajax_response<\/code> \u2014 Modify the AJAX JSON response before it is sent<\/li>\n<\/ul>\n\n<h4>Price<\/h4>\n\n<ul>\n<li><code>itg_flt_price_range<\/code> \u2014 Override the computed min\/max price range for the slider<\/li>\n<li><code>itg_flt_price_range_cache_ttl<\/code> \u2014 Change the transient cache lifetime for the price range<\/li>\n<\/ul>\n\n<h4>Frontend<\/h4>\n\n<ul>\n<li><code>itg_flt_script_data<\/code> \u2014 Add extra data to the JS object passed to the frontend script<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>itg-filter-easy<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>WooCommerce \u2192 ITG Filter<\/strong> to configure the filter structure and options.<\/li>\n<li>In Elementor, drag the <strong>ITG Filter Easy<\/strong> widget into the sidebar of your shop page template.<\/li>\n<li>In the widget settings, set the <strong>Products selector<\/strong> \u2014 the CSS selector of the WooCommerce Products widget container (default: <code>.elementor-widget-woocommerce-products<\/code>).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20output%20products%3F\"><h3>Does this plugin output products?<\/h3><\/dt>\n<dd><p>No. It only filters the output of an existing WooCommerce Products widget placed on the same page. Add a WooCommerce Products widget to your Elementor template first, then add ITG Filter Easy to the sidebar.<\/p><\/dd>\n<dt id=\"what%20css%20selector%20should%20i%20use%3F\"><h3>What CSS selector should I use?<\/h3><\/dt>\n<dd><p>The default selector <code>.elementor-widget-woocommerce-products<\/code> works for most setups. If you have multiple product widgets on the page, use a more specific selector (e.g. add a custom CSS class to the widget wrapper in Elementor).<\/p><\/dd>\n<dt id=\"does%20it%20work%20without%20elementor%3F\"><h3>Does it work without Elementor?<\/h3><\/dt>\n<dd><p>No. The widget is built for Elementor. Elementor (free version) is required.<\/p><\/dd>\n<dt id=\"is%20woocommerce%20required%3F\"><h3>Is WooCommerce required?<\/h3><\/dt>\n<dd><p>Yes. WooCommerce 7.0 or later is required.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20a%20translation%3F\"><h3>How do I add a translation?<\/h3><\/dt>\n<dd><p>Copy <code>languages\/itg-filter-easy.pot<\/code>, translate it with Poedit, and save as <code>itg-filter-easy-{locale}.po<\/code>. Compile to <code>.mo<\/code> in the same folder.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Added: README.md and readme.txt with full documentation<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Moved donate block immediately after License section on Help \u2014 Overview tab<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Fixed: PHP syntax error in itg-flt-settings-tail.php<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Added: Donate block on Help \u2014 Overview tab (USDT TRC-20, clickable address, Copy button)<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Added: License section on Help \u2014 Overview tab (GNU GPL v2)<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Removed: all references to external exchange rate service<\/li>\n<li>Exchange rate URL is now fully configurable<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Added: GNU GPL v2 license header<\/li>\n<li>Added: Exchange rate URL setting with localization in 5 languages<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fixed: download URL in auto-update info always matches the ZIP filename<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Fixed: ZIP compiled with forward slashes for correct extraction on Linux servers<\/li>\n<li>Fixed: nonce verified only once in update check handler<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Per-request in-memory cache for query, price range and sale IDs<\/li>\n<li>5 localizations: ru_RU, fr_FR, de_DE, es_ES, zh_CN<\/li>\n<li>Settings modal: single-column layout, compact labels<\/li>\n<li>Mobile: WCAG tap targets<\/li>\n<li>16 developer filter hooks<\/li>\n<li>All UI strings in English<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"WooCommerce product filter Elementor widget with AJAX support. Filters the existing catalog output without page reload.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/335551","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=335551"}],"author":[{"embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/itgwp"}],"wp:attachment":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=335551"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=335551"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=335551"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=335551"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=335551"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=335551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}