=== PayGate Content Restriction ===
Contributors: joshswebservices
Tags: membership, paywall, content restriction, stripe, subscriptions
Requires at least: 6.0
Tested up to: 6.9
Requires PHP: 8.0
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Restrict post and page content behind membership tiers with Stripe-native payments. No page builders needed.

== Description ==

PayGate Content Restriction lets you create membership tiers, restrict any post or page to specific tiers, and process payments via Stripe Checkout — all from within WordPress without any external middleware.

**Key Features:**

* Create unlimited membership tiers with custom pricing and features
* Restrict individual posts, pages, or custom post types
* Three paywall designs: Modern, Minimal, and Classic
* Stripe-native payments (Checkout Sessions + Subscriptions)
* Real Stripe webhook handling with signature verification
* Admin member management dashboard
* Analytics dashboard with conversion charts
* Bulk content restriction tools
* Member self-service dashboard (view/cancel subscription)
* Transactional email notifications (welcome, cancellation, payment failed)
* Theme template override support
* WP-CLI demo seeder for testing

**Paywall Templates:**

* **Modern** — Card with blur fade-in effect and tier grid
* **Minimal** — Clean HR divider with stacked full-width CTA buttons
* **Classic** — Badge icon, tier cards in flex row, "Most Popular" label

**No dependencies on page builders, shortcode soup, or external services** beyond Stripe.

== Installation ==

1. Upload the `paygate-content-restriction` folder to `/wp-content/plugins/`
2. Activate the plugin through the **Plugins** menu in WordPress
3. Go to **PayGate > Settings** and enter your Stripe API keys
4. Create your membership tiers under **PayGate > Membership Tiers**
5. Edit any post or page and use the **Content Restriction** metabox to restrict it

== Frequently Asked Questions ==

= Does this work with any theme? =

Yes. PayGate Content Restriction has no theme dependencies. Paywall styles are scoped CSS that work alongside any WordPress theme.

= Can I customize the paywall appearance? =

Yes. Place a file at `{your-theme}/paygate-content-restriction/paywall-{modern|minimal|classic}.php` and the plugin will use it automatically.

= What Stripe events are handled? =

`checkout.session.completed`, `invoice.payment_succeeded`, `customer.subscription.updated`, `customer.subscription.deleted`

= Is this compatible with WooCommerce? =

Yes. PayGate Content Restriction uses its own custom tables and does not conflict with WooCommerce.

= Does this plugin send data to any external services? =

Yes — see the External Services section below. The plugin connects to Stripe for payment processing and optionally to Freemius for Pro license management.

= Where is the webhook URL for Stripe? =

After activating the plugin, go to **PayGate > Settings > Stripe** tab. The webhook URL is displayed there. Add it to your Stripe Dashboard under Developers > Webhooks.

= What happens to my data if I uninstall the plugin? =

Uninstalling the plugin removes all plugin data including membership tiers, member records, content restrictions, and analytics events. WordPress options with the `pgcr_` prefix are also deleted.

= Can members cancel their own subscription? =

Yes. Members can view their membership status and cancel their subscription from the member dashboard shortcode `[pgcr_member_dashboard]`.

== Screenshots ==

1. Modern paywall template
2. Minimal paywall template
3. Classic paywall template
4. Admin Members dashboard
5. Admin Analytics dashboard
6. Bulk restrict interface
7. Post restriction metabox
8. Settings page (Stripe configuration)

== External Services ==

This plugin connects to the following external services:

= Stripe =

PayGate Content Restriction uses Stripe to process payments and manage subscriptions.

* **What data is sent:** When a user subscribes, their WordPress user ID, email address, and selected membership tier are used to create a Stripe Customer and initiate a Checkout Session. Stripe receives whatever billing information the user enters during checkout.
* **When it is sent:** Only when a logged-in user clicks a "Get Access" or "Subscribe" button to initiate checkout, or when a Stripe webhook event is received and verified.
* **Stripe's terms of service:** https://stripe.com/legal
* **Stripe's privacy policy:** https://stripe.com/privacy

= Freemius (Pro version only) =

The Pro version of this plugin uses Freemius for license management and automatic updates.

* **What data is sent:** WordPress site URL, plugin version, and (with user consent) basic site and admin contact information for license activation.
* **When it is sent:** Only when the Pro version is active and a license is being activated or checked.
* **Freemius terms of service:** https://freemius.com/terms/
* **Freemius privacy policy:** https://freemius.com/privacy/

== Changelog ==

= 1.0.0 =
* Initial release
* Core content restriction engine with paywall templates (Modern, Minimal, Classic)
* Stripe-native checkout sessions and subscription management
* Webhook handlers for full subscription lifecycle
* Admin member management dashboard
* Analytics dashboard with Chart.js charts
* Bulk content restriction tools
* Member self-service dashboard
* Transactional email notifications

== Upgrade Notice ==

= 1.0.0 =
Initial release.
