=== Role Membership Access for WooCommerce ===
Contributors: jrtwebsolutions
Tags: woocommerce, membership, roles, access control, restrict products
Requires at least: 6.2
Requires Plugins: woocommerce
Tested up to: 6.9
Requires PHP: 8.0
Stable tag: 1.0.0
WC requires at least: 8.0
WC tested up to: 9.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Restrict WooCommerce products, categories, and checkout access based on user roles for membership control.

== Description ==

Role Membership Access for WooCommerce lets you restrict WooCommerce product visibility, purchasing, add-to-cart, cart, and checkout access based on WordPress user roles.

You can:
* Restrict access using **Category Allowed Roles** (Products → Categories).
* Restrict access using **Product Allowed Roles** with **Access Mode** (Products → Edit Product).
* Prevent unauthorized users from:
  - Viewing restricted products in the shop/catalog (theme dependent, hardened via filters)
  - Adding restricted products to cart
  - Purchasing restricted products
  - Completing checkout if restricted products are in cart

The plugin provides:
* A WooCommerce Settings tab: WooCommerce → Settings → WooRole Access
* Per-category role restrictions
* Per-product role restrictions with Access Mode (Inherit / Manual / Combine)
* Multi-category conflict strategy options (Union / Intersection / Priority Category)
* Optional redirect for unauthorized users
* A reliable inline notice shown above product title (supports block themes)

== Installation ==

1. Upload the plugin folder `role-membership-access-for-woocommerce` to `/wp-content/plugins/`.
2. Activate the plugin via Plugins → Installed Plugins.
3. Ensure WooCommerce is installed and active.
4. Configure plugin settings:
   WooCommerce → Settings → WooRole Access

== Setup / Configuration ==

= Step 1: Configure global plugin settings =

Go to:
WooCommerce → Settings → WooRole Access

Available settings:
1. Restriction Message
   - The message displayed when a user is blocked.
2. Redirect Unauthorized Users
   - If enabled, blocked users will be redirected to the URL below.
3. Redirect URL
   - Recommended: My Account page or a custom “Join Membership” page.
4. Multi-Category Strategy
   - Determines behavior when a product belongs to multiple restricted categories:
     - Union (OR): allowed roles from any restricted category (recommended default)
     - Intersection (AND): user must match all restricted categories
     - Priority Category: use only the product’s “Primary Category”
5. Default Primary Category (for Priority Strategy)
   - Used as a default selection for products when Priority Strategy is enabled.

= Step 2: Restrict categories (recommended first) =

Go to:
Products → Categories → Add/Edit Category

Set:
Allowed Roles (multi-select)

Behavior:
* If a category has Allowed Roles set, products in that category are restricted depending on their Product Access Mode.

= Step 3: Restrict individual products (when needed) =

Go to:
Products → Edit Product → Product data → General

Fields:
1. Access Mode
   - Inherit from Categories (default)
   - Manual Override
   - Combine (Manual + Categories)
2. Allowed Roles (Manual)
   - Used only for Manual Override or Combine
3. Primary Category (for Priority Strategy)
   - Used only when global Multi-Category Strategy = Priority Category

== How Access Mode Works ==

= Inherit from Categories =
The product uses category Allowed Roles only.
* If no categories have restrictions, product is unrestricted.

= Manual Override =
The product ignores category restrictions and uses Allowed Roles (Manual) only.

= Combine (Manual + Categories) =
The product is accessible if the user matches either:
* Product manual roles OR
* Category roles

== Multi-Category Strategy (Conflict Handling) ==

When a product belongs to multiple categories with different Allowed Roles:

1) Union (OR)
- Allowed roles are combined from all restricted categories.
- Prevents accidental lockouts. Recommended for most stores.

2) Intersection (AND)
- Allowed roles are the overlap of restricted category roles.
- Can lock products if categories disagree (use carefully).

3) Priority Category
- Only one category drives access.
- Select a Primary Category in product settings.
- Optionally set a Default Primary Category globally to reduce per-product setup.

== Blocking Behavior ==

If a user is not authorized:
* Product may be hidden from catalog (theme dependent)
* User cannot add to cart
* User cannot proceed with checkout if restricted items are in the cart
* Notice is injected above the product title (block-theme friendly)
* Optional redirect can be enabled

== Example: Restrict a Category to Subscriber Only ==

1. Go to Products → Categories
2. Edit the category (example: "Members Only")
3. In Allowed Roles, select: subscriber
4. Save

All products in that category will be restricted based on their Access Mode:
- Inherit: category restriction applies
- Manual: product manual roles apply instead
- Combine: both apply

== Example: Restrict a Product to Editor Only ==

1. Go to Products → Edit Product
2. Product Data → General
3. Access Mode: Manual Override
4. Allowed Roles (Manual): editor
5. Save

Result: only users with editor role can view/purchase.

== Frequently Asked Questions ==

= I set roles but users can still access. Why? =
Check:
1. Product Access Mode
   - If it is Inherit, manual roles won’t apply unless Combine/Manual.
2. Multi-Category Strategy
   - With Union, another category may allow the user role.
3. Cache
   - Clear page cache/object cache.
4. Variable products
   - The plugin normalizes variation IDs to parent product, so it should work. Ensure you saved roles on parent product/category.

= I can’t see the message/notices on product page. =
Some block themes don’t render WooCommerce notices in classic locations.
This plugin renders its own inline notice above the product title and includes JS fallback.

= Does it support guests (not logged in)? =
Yes. Guests are treated as role "guest".
If a product is restricted to roles like subscriber/editor, guests are blocked.

= Can administrators bypass restrictions? =
Yes, administrators are always allowed by default.

== Screenshots ==
1. WooCommerce Settings → WooRole Access tab
2. Category Allowed Roles field
3. Product Access Mode and Allowed Roles
4. Example blocked message above product title

== Changelog ==

= 1.0.0 =
* Initial release
* Category role restrictions
* Product role restrictions with Access Mode (Inherit/Manual/Combine)
* Cart + Checkout protections
* Multi-category strategy (Union/Intersection/Priority)
* Default primary category support
* Inline product notice + JS fallback (block theme friendly)

== Upgrade Notice ==

= 1.0.0 =
Initial release.

== Privacy Policy ==

Role Membership Access for WooCommerce does not collect, store, or transmit any personal data.

This plugin operates entirely within the WordPress and WooCommerce environment and uses existing user roles and product/category settings to control access.

No data is sent to external servers.
No tracking, analytics, or cookies are added by this plugin.
No personal or sensitive user information is stored outside of WordPress.

If you choose to use optional external links (such as PayPal or Buy Me a Coffee), you will be redirected to third-party services that operate under their own privacy policies.

For questions or concerns, please visit:
https://www.jrtwebsolutions.com

