{"id":265058,"date":"2025-12-05T12:28:29","date_gmt":"2025-12-05T12:28:29","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/user-exclusive-products\/"},"modified":"2026-05-20T17:26:53","modified_gmt":"2026-05-20T17:26:53","slug":"aisp-user-exclusive-products","status":"publish","type":"plugin","link":"https:\/\/tw.wordpress.org\/plugins\/aisp-user-exclusive-products\/","author":23268796,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.0","requires":"5.0","requires_php":"7.2","requires_plugins":null,"header_name":"User Exclusive Products","header_author":"Marco Gagnon","header_description":"Restrict WooCommerce products to specific users only (Botiga Pro friendly).","assets_banners_color":"ab88bb","last_updated":"2026-05-20 17:26:53","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/marcogagnon.ca\/user-exclusive-products-for-woocommerce\/","header_author_uri":"https:\/\/marcogagnon.ca\/plugins\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":365,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"aisimpleplugin","date":"2026-03-09 17:02:25"},"1.0.1":{"tag":"1.0.1","author":"aisimpleplugin","date":"2026-05-08 17:09:35"},"1.0.2":{"tag":"1.0.2","author":"aisimpleplugin","date":"2026-05-20 17:26:53"}},"upgrade_notice":{"1.0.1":"<p>This update improves WooCommerce REST API compatibility, a complete uninstall cleanup routine. It also fixes several internal initialization and filtering issues. No action required.<\/p>","1.0.0":"<p>First stable public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3412199,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3412199,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3412199,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772-250.png":{"filename":"banner-772-250.png","revision":3412199,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2"],"block_files":[],"assets_screenshots":{"Screenshot-1.png":{"filename":"Screenshot-1.png","revision":3412199,"resolution":"1","location":"assets","locale":"","width":1683,"height":613},"Screenshot-2.png":{"filename":"Screenshot-2.png","revision":3412199,"resolution":"2","location":"assets","locale":"","width":983,"height":830}},"screenshots":{"1":"Product metabox: Select exclusive users","2":"Hidden product behavior (not visible to guests or unauthorized users)"}},"plugin_section":[],"plugin_tags":[251728,251729,702,1914,6309],"plugin_category":[45],"plugin_contributors":[240964],"plugin_business_model":[],"class_list":["post-265058","plugin","type-plugin","status-publish","hentry","plugin_tags-exclusivity","plugin_tags-private-products","plugin_tags-products","plugin_tags-restrict","plugin_tags-visibility","plugin_category-ecommerce","plugin_contributors-aisimpleplugin","plugin_committers-aisimpleplugin","plugin_support_reps-marcgagnondev"],"banners":{"banner":"https:\/\/ps.w.org\/aisp-user-exclusive-products\/assets\/banner-772-250.png?rev=3412199","banner_2x":"https:\/\/ps.w.org\/aisp-user-exclusive-products\/assets\/banner-1544x500.png?rev=3412199","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/aisp-user-exclusive-products\/assets\/icon-128x128.png?rev=3412199","icon_2x":"https:\/\/ps.w.org\/aisp-user-exclusive-products\/assets\/icon-256x256.png?rev=3412199","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/aisp-user-exclusive-products\/assets\/Screenshot-1.png?rev=3412199","caption":"Product metabox: Select exclusive users"},{"src":"https:\/\/ps.w.org\/aisp-user-exclusive-products\/assets\/Screenshot-2.png?rev=3412199","caption":"Hidden product behavior (not visible to guests or unauthorized users)"}],"raw_content":"<!--section=description-->\n<p><strong>User Exclusive Products<\/strong> lets you restrict any WooCommerce product to one or multiple users.<\/p>\n\n<p>If a product is exclusive:\n- Only selected users (and administrators) can see it.\n- Unauthorized visitors cannot see the product in shop, category, tags, search or AJAX live search.\n- Direct access to the product URL redirects to the shop page.\n- Fully compatible with modern search engines (including FiboSearch).<\/p>\n\n<p>Perfect for:\n- B2B stores\n- VIP customer access\n- Private product offers\n- Client-specific catalogs\n- Wholesale deals<\/p>\n\n<h3>\ud83d\udd12 Key Features<\/h3>\n\n<ul>\n<li>Restrict product visibility to <strong>specific users only<\/strong><\/li>\n<li>Admins are always allowed (cannot be restricted)<\/li>\n<li>Product completely hidden from:\n\n<ul>\n<li>Shop<\/li>\n<li>Category pages<\/li>\n<li>Product tags<\/li>\n<li>Search results<\/li>\n<li>AJAX \/ live search<\/li>\n<li>REST API product queries<\/li>\n<\/ul><\/li>\n<li>Lightweight &amp; fast (no bloat)<\/li>\n<li>No role management required<\/li>\n<li>Simple multiselect user selector (WooCommerce-style)<\/li>\n<\/ul>\n\n<h3>\ud83e\udde9 Compatibility<\/h3>\n\n<p>This plugin is built with <strong>standard WooCommerce filters<\/strong>, making it compatible with most themes.<\/p>\n\n<p><strong>Tested and working with:<\/strong>\n- Botiga \/ Botiga Pro (AJAX search compatible)\n- Storefront\n- Astra (front-end compatibility may vary)\n- FiboSearch (fully supported)<\/p>\n\n<p>If you use a theme or plugin with custom product queries, it should still work normally as long as they respect WordPress or WooCommerce APIs.<\/p>\n\n<h3>\ud83c\udfaf No Roles. No Conditions. No Complexity.<\/h3>\n\n<p>This plugin focuses on <strong>one thing only<\/strong>:\n\u2192 Restrict WooCommerce products to selected users.<\/p>\n\n<p>No roles, no categories, no conditions \u2014 clean, simple, reliable.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/user-exclusive-products\/<\/code><\/li>\n<li>Activate the plugin through the \u201cPlugins\u201d menu in WordPress<\/li>\n<li>Edit any WooCommerce product<\/li>\n<li>Use the <strong>Exclusive Users<\/strong> box to select which customers can view the product<\/li>\n<li>Leave empty to make the product public<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20users%20need%20to%20be%20logged%20in%3F\"><h3>Do users need to be logged in?<\/h3><\/dt>\n<dd><p>Yes. Only logged-in users can be matched with the allowed list.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20non-authorized%20user%20opens%20the%20product%20url%3F\"><h3>What happens if a non-authorized user opens the product URL?<\/h3><\/dt>\n<dd><p>They are automatically redirected to the shop page.<\/p><\/dd>\n<dt id=\"can%20i%20restrict%20by%20role%3F\"><h3>Can I restrict by role?<\/h3><\/dt>\n<dd><p>No. This plugin is intentionally simple and only restricts by specific users.<\/p><\/dd>\n<dt id=\"can%20i%20restrict%20categories%20or%20variations%3F\"><h3>Can I restrict categories or variations?<\/h3><\/dt>\n<dd><p>Not in version 1.0.0. These features may be added later if requested.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20fibosearch%3F\"><h3>Is it compatible with FiboSearch?<\/h3><\/dt>\n<dd><p>Yes, fully compatible. Hidden products never appear in AJAX search results.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20all%20themes%3F\"><h3>Does it work with all themes?<\/h3><\/dt>\n<dd><p>It works with any theme that respects standard WooCommerce queries.<br \/>\nSome custom-built themes may require compatibility tweaks.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Updated: Tested up to WordPress 7.0<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Improved: Allowed Users field now uses AJAX search (wc-customer-search) instead of a static list, supporting sites with any number of users without performance impact.<\/li>\n<li>Fixed: Renamed the <code>AISP_Exclusif_Products_Category_Users<\/code> class to <code>AISP_Exclusive_Products_Category_Users<\/code> for consistency across the codebase.<\/li>\n<li>Fixed: Corrected class name casing from <code>AISP_exclusive_Products_*<\/code> to <code>AISP_Exclusive_Products_*<\/code> across multiple plugin modules.<\/li>\n<li>Fixed: <code>AISP_Exclusive_Products_Category_Users<\/code> and <code>AISP_Exclusive_Products_Bulk_Actions<\/code> are now initialized only after confirming WooCommerce is active.<\/li>\n<li>Fixed: Replaced the <code>rest_prepare_post<\/code> hook with <code>rest_prepare_product<\/code> and <code>rest_prepare_product_variation<\/code> to properly support WooCommerce product REST endpoints.<\/li>\n<li>Fixed: <code>filter_rest_response()<\/code> now returns a proper <code>WP_Error<\/code> with HTTP 401\/403 responses instead of <code>null<\/code> when restricted products are requested through the REST API.<\/li>\n<li>Fixed: Added the <code>rest_product_query<\/code> filter alongside <code>rest_post_query<\/code> to properly intercept WooCommerce REST API product queries.<\/li>\n<li>Fixed: Added <code>suppress_filters =&gt; true<\/code> to internal <code>get_posts()<\/code> calls to prevent recursive filter execution.<\/li>\n<li>Fixed: Bulk action transient keys are now scoped per user to prevent collisions when multiple administrators use the interface simultaneously.<\/li>\n<li>Added: Plugin constants for version, path, URL, and basename handling (<code>AISP_EP_VERSION<\/code>, <code>AISP_EP_PATH<\/code>, <code>AISP_EP_URL<\/code>, <code>AISP_EP_BASENAME<\/code>).<\/li>\n<li>Added: Admin notice displayed when WooCommerce is not active instead of failing silently.<\/li>\n<li>Added: New <code>uninstall.php<\/code> cleanup routine to remove plugin data, transients, and related cache entries when the plugin is deleted.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Restrict WooCommerce products to specific users. Products remain hidden from all unauthorized users","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/265058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=265058"}],"author":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/aisimpleplugin"}],"wp:attachment":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=265058"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=265058"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=265058"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=265058"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=265058"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=265058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}