{"id":289082,"date":"2026-04-11T11:04:29","date_gmt":"2026-04-11T11:04:29","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/membermagix\/"},"modified":"2026-04-13T08:45:37","modified_gmt":"2026-04-13T08:45:37","slug":"membermagix","status":"publish","type":"plugin","link":"https:\/\/hi.wordpress.org\/plugins\/membermagix\/","author":23280513,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"4.0.4","stable_tag":"4.0.4","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"MemberMagix","header_author":"MemberMagix","header_description":"A lightweight, secure, and marketing-focused WordPress membership plugin with passwordless magic-link auth, content protection, Stripe integration, and elegant onboarding.","assets_banners_color":"e2e1d8","last_updated":"2026-04-13 08:45:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/membermagix.com","header_author_uri":"https:\/\/surfstyk.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":49,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"4.0.4":{"tag":"4.0.4","author":"surfstyk","date":"2026-04-13 08:45:37"}},"upgrade_notice":{"4.0.0":"<p>Major architecture update for WordPress.org. Plugin prefix renamed from mmx_ to mmax_. Commercial features moved to MemberMagix Pro add-on. Database tables migrate automatically on activation.<\/p>","3.0.0":"<p>Premium content monetization! Charge for articles with Stripe Embedded Checkout \u2014 visitors subscribe without leaving the page. Requires Business tier license and Stripe connection.<\/p>","2.0.0":"<p>New in-plugin checkout! Upgrade to Personal or Business directly from the settings page \u2014 no external site, no email waiting, instant activation.<\/p>","1.0.5":"<p>Plugin licensing migrated to Keygen CE. Existing Lemon Squeezy keys will no longer work \u2014 contact support for a new key.<\/p>","1.0.4":"<p>WordPress.org submission release. Removes external font loading, adds service disclosures.<\/p>","1.0.3":"<p>Email-first progressive form: smoother login for returning users, upgrade panel for logged-in members.<\/p>","1.0.2":"<p>Brand icon updated from lock to groups. Visual-only change.<\/p>","1.0.1":"<p>Improved WordPress.org compliance. Recommended update for all users.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3503895,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3503895,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3503895,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3504048,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3504048,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["4.0.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3504048,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3504048,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3504048,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3504048,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3504048,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"Membership form with magic link signup","2":"Content protection with blur overlay and teaser preview","3":"Admin settings dashboard","4":"Bulk content protection interface","5":"Member management table"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[18193,185112,1932,35316,12688],"plugin_category":[58],"plugin_contributors":[259967],"plugin_business_model":[],"class_list":["post-289082","plugin","type-plugin","status-publish","hentry","plugin_tags-content-protection","plugin_tags-magic-link","plugin_tags-membership","plugin_tags-passwordless-login","plugin_tags-paywall","plugin_category-user-management","plugin_contributors-surfstyk","plugin_committers-surfstyk"],"banners":{"banner":"https:\/\/ps.w.org\/membermagix\/assets\/banner-772x250.png?rev=3504048","banner_2x":"https:\/\/ps.w.org\/membermagix\/assets\/banner-1544x500.png?rev=3504048","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/membermagix\/assets\/icon.svg?rev=3503895","icon":"https:\/\/ps.w.org\/membermagix\/assets\/icon.svg?rev=3503895","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/membermagix\/assets\/screenshot-1.png?rev=3504048","caption":"Membership form with magic link signup"},{"src":"https:\/\/ps.w.org\/membermagix\/assets\/screenshot-2.png?rev=3504048","caption":"Content protection with blur overlay and teaser preview"},{"src":"https:\/\/ps.w.org\/membermagix\/assets\/screenshot-3.png?rev=3504048","caption":"Admin settings dashboard"},{"src":"https:\/\/ps.w.org\/membermagix\/assets\/screenshot-4.png?rev=3504048","caption":"Bulk content protection interface"},{"src":"https:\/\/ps.w.org\/membermagix\/assets\/screenshot-5.png?rev=3504048","caption":"Member management table"}],"raw_content":"<!--section=description-->\n<p>MemberMagix is a secure, lightweight WordPress membership plugin that replaces traditional password-based login with <strong>passwordless magic-link authentication<\/strong>. Protect any post or page with server-side content gating \u2014 unauthorized visitors see only a teaser preview, while authenticated members get the full content.<\/p>\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Passwordless Magic Links<\/strong> \u2014 Members log in by clicking a secure link sent to their email. No passwords to forget, leak, or manage.<\/li>\n<li><strong>Server-Side Content Protection<\/strong> \u2014 Protected content is never sent to unauthorized users. A teaser is extracted server-side with a blur overlay and membership panel.<\/li>\n<li><strong>Author-Controlled Teasers<\/strong> \u2014 Use the <code>[mmax_cutoff]<\/code> shortcode to control exactly where the teaser ends, or let MemberMagix auto-extract from your first paragraphs.<\/li>\n<li><strong>Custom Overlays<\/strong> \u2014 Design your protection panel using the WordPress block editor. Full creative control over what visitors see.<\/li>\n<li><strong>Member Management<\/strong> \u2014 View, search, and export members. Track terms acceptance and login history.<\/li>\n<li><strong>Brand Customization<\/strong> \u2014 Match membership forms and overlays to your site's brand colors via the Style settings tab.<\/li>\n<\/ul>\n\n<p><strong>Premium Features (via MemberMagix Pro add-on):<\/strong><\/p>\n\n<ul>\n<li>Multiple custom overlays with per-post assignment<\/li>\n<li>Bulk content protection tools<\/li>\n<li>Remove free-tier branding<\/li>\n<li><strong>Stripe Premium Content<\/strong> \u2014 Monetize posts with Stripe Checkout, subscription management, and automatic magic-link delivery after payment<\/li>\n<\/ul>\n\n<h3>Third-Party Libraries<\/h3>\n\n<p>This plugin bundles the following open-source library:<\/p>\n\n<h4>Alpine.js<\/h4>\n\n<p>Alpine.js v3.15.10 by Caleb Porzio is used for lightweight reactive UI in the membership form.<\/p>\n\n<ul>\n<li>License: MIT (GPL-compatible)<\/li>\n<li>Source code: <a href=\"https:\/\/github.com\/alpinejs\/alpine\">https:\/\/github.com\/alpinejs\/alpine<\/a><\/li>\n<li>Release: <a href=\"https:\/\/github.com\/alpinejs\/alpine\/releases\/tag\/v3.15.10\">https:\/\/github.com\/alpinejs\/alpine\/releases\/tag\/v3.15.10<\/a><\/li>\n<li>Bundled file: <code>assets\/js\/alpine.min.js<\/code><\/li>\n<\/ul>\n\n<p>No build tools are required. The minified file (<code>alpine.min.js<\/code>) was downloaded directly from the Alpine.js CDN for v3.15.10. The full unminified source is available at the GitHub repository and release page linked above.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>membermagix<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install directly through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Go to <strong>MemberMagix &gt; Settings<\/strong> to configure your email sender, terms page URL, and overlay defaults.<\/li>\n<li>Add the <code>[mmax_membership_form]<\/code> shortcode to any page to display the membership signup form.<\/li>\n<li>Edit any post or page and enable content protection in the <strong>Content Protection<\/strong> meta box.<\/li>\n<\/ol>\n\n<p><strong>Recommended:<\/strong> Install an SMTP plugin (e.g., WP Mail SMTP) for reliable magic link email delivery.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20members%20log%20in%3F\"><h3>How do members log in?<\/h3><\/dt>\n<dd><p>Members enter their email address in the membership form. MemberMagix sends them a secure, one-time magic link. Clicking the link logs them in instantly \u2014 no password required.<\/p><\/dd>\n<dt id=\"is%20the%20protected%20content%20secure%3F\"><h3>Is the protected content secure?<\/h3><\/dt>\n<dd><p>Yes. MemberMagix uses server-side content protection. The full content is never sent to unauthorized browsers. Only a teaser preview is delivered, with the rest replaced before the page reaches the visitor.<\/p><\/dd>\n<dt id=\"can%20i%20control%20what%20appears%20in%20the%20teaser%3F\"><h3>Can I control what appears in the teaser?<\/h3><\/dt>\n<dd><p>Yes. Place the <code>[mmax_cutoff]<\/code> shortcode anywhere in your post to define the exact split point. Everything above the shortcode becomes the teaser. If no cutoff is set, MemberMagix auto-extracts the first few paragraphs.<\/p><\/dd>\n<dt id=\"magic%20link%20emails%20are%20delayed%20or%20never%20arrive%20%E2%80%94%20what%27s%20wrong%3F\"><h3>Magic link emails are delayed or never arrive \u2014 what's wrong?<\/h3><\/dt>\n<dd><p>The most common cause is WordPress's \"pseudo-cron\" (<code>wp-cron.php<\/code>). By default, WordPress only runs scheduled tasks \u2014 including sending emails \u2014 when someone visits the site via HTTP. On low-traffic or staging sites, this means magic link emails can be silently delayed for hours.<\/p>\n\n<p><strong>Symptoms:<\/strong> You submit the form, the plugin reports success, but the email doesn't arrive for a long time (or until someone else visits the site).<\/p>\n\n<p><strong>Fix:<\/strong> Disable WP pseudo-cron and set up a real system crontab:<\/p>\n\n<ol>\n<li>Add to <code>wp-config.php<\/code>: <code>define('DISABLE_WP_CRON', true);<\/code><\/li>\n<li>Add a system cron job: <code>*\/5 * * * * cd \/path\/to\/wordpress &amp;&amp; php wp-cron.php<\/code><\/li>\n<\/ol>\n\n<p>Also recommended: install an SMTP plugin (e.g., WP Mail SMTP) for reliable email delivery.<\/p><\/dd>\n<dt id=\"does%20membermagix%20require%20any%20external%20services%3F\"><h3>Does MemberMagix require any external services?<\/h3><\/dt>\n<dd><p>No. MemberMagix runs entirely on your own WordPress install \u2014 no third-party APIs, no external services, no data leaving your server. We recommend an SMTP plugin (like WP Mail SMTP) for reliable magic-link email delivery, which is a WordPress best practice independent of this plugin.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20plugin%20is%20uninstalled%3F\"><h3>What happens when the plugin is uninstalled?<\/h3><\/dt>\n<dd><p>All plugin data (custom tables, options, user meta, post meta, overlays, cron jobs, and transients) is fully removed when you delete the plugin through WordPress admin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>4.0.4<\/h4>\n\n<ul>\n<li>Content protection meta box now available on all public post types (was restricted to post\/page, flagged as trialware)<\/li>\n<li>Removed check-email REST endpoint that leaked account existence (signup vs login mode)<\/li>\n<li>Simplified membership form: single-step email + terms flow, no account enumeration possible<\/li>\n<li>Terms acceptance now required for all magic link requests (new and returning users)<\/li>\n<li>Updated Alpine.js from 3.13.10 to 3.15.10<\/li>\n<li>Fixed register_setting sanitize_callback: use rest_sanitize_boolean instead of raw bool cast<\/li>\n<\/ul>\n\n<h4>4.0.3<\/h4>\n\n<ul>\n<li>Overlay CPT now visible in admin menu (was hidden, flagged as locked feature)<\/li>\n<li>Applied kses sanitization to teaser and overlay content in the_content filter and REST responses<\/li>\n<li>Removed dead Pro-only methods (inject\/remove cutoff shortcode) and helper meta reads<\/li>\n<li>Removed Pro-only table drops from uninstall.php (base only creates mmax_tokens)<\/li>\n<li>Added SVG stroke attributes to kses allowlist for success checkmark icon<\/li>\n<li>Added specific Alpine.js release URL to Third-Party Libraries documentation<\/li>\n<\/ul>\n\n<h4>4.0.2<\/h4>\n\n<ul>\n<li>Fixed membership form not rendering on protected posts (wp_kses_post was stripping form HTML and Alpine.js attributes)<\/li>\n<li>Removed user ID from check-email REST response to prevent user enumeration<\/li>\n<li>Added Alpine.js x-cloak support to prevent flash of unstyled form steps<\/li>\n<\/ul>\n\n<h4>4.0.1<\/h4>\n\n<ul>\n<li>Fixed auto-submit magic link for returning users (skip intermediate \"Welcome back\" step)<\/li>\n<li>Refined HTML sanitization: overlay content no longer passed through wp_kses_post<\/li>\n<li>Added escaping throughout for WP.org compliance (round 2 review feedback)<\/li>\n<li>Added Alpine.js third-party library attribution in readme.txt<\/li>\n<\/ul>\n\n<h4>4.0.0<\/h4>\n\n<ul>\n<li>Freemium architecture: prefix rename mmx to mmax for WP.org uniqueness<\/li>\n<li>Plugin split: commercial features extracted to MemberMagix Pro add-on<\/li>\n<li>18 extension points (filters and actions) for Pro add-on integration<\/li>\n<li>Database migration from mmx_ and ssm_ prefixes to mmax_<\/li>\n<li>All inline scripts and styles moved to enqueued files for WP.org compliance<\/li>\n<li>GPL license headers added to all files<\/li>\n<\/ul>\n\n<h4>3.4.1<\/h4>\n\n<ul>\n<li>Email template restyled to match overlay\/form brand palette (amber CTA, teal accents, warm neutrals)<\/li>\n<li>Email colors now read from Style tab settings with brand defaults<\/li>\n<li>Extracted email template to dedicated file for maintainability<\/li>\n<li>Configurable email button text (default: \"View Blog\") in General tab settings<\/li>\n<li>Send Test Email button on General tab for delivery verification<\/li>\n<li>Fixed email expiry notice: removed incorrect \"single use\" claim, respects token expiry filter with proper pluralization<\/li>\n<\/ul>\n\n<h4>3.4.0<\/h4>\n\n<ul>\n<li>Reusable magic link tokens: both login and portal links in emails now work regardless of click order<\/li>\n<li>One-session-at-a-time: each magic link login destroys all previous sessions, enforcing single-device access<\/li>\n<li>Session replacement notification: dismissible toast informs users when a prior session was replaced<\/li>\n<li>Token usage analytics: new used_count column tracks how many times each token is used within its TTL<\/li>\n<li>Passwordless subscriber role: all password functionality disabled for subscribers (profile fields, password reset, wp-login.php password auth, REST API, users list reset action)<\/li>\n<li>Subscribers authenticate exclusively via magic links \u2014 role change to editor\/admin restores password functionality<\/li>\n<\/ul>\n\n<h4>3.3.1<\/h4>\n\n<ul>\n<li>Removed \"Coming Soon\" badges from Stripe Integration and Paid Subscriptions in feature table<\/li>\n<li>Moved blur settings from per-post meta box to Style tab (global Overlay Blur section)<\/li>\n<li>Added Membership Level and Subscription Status columns to CSV export<\/li>\n<li>Added Membership Level column and Edit Tier action to Members admin table<\/li>\n<li>Manual tier override: admins can assign membership levels independent of Stripe subscriptions<\/li>\n<li>License activation now redirects to Dashboard tab so newly unlocked tabs are immediately visible<\/li>\n<li>License notices display via admin_notices (visible on any tab)<\/li>\n<li>Left-aligned post-upgrade welcome screen to match admin panel layout<\/li>\n<li>Hardened Stripe settings fields against browser autofill (autocomplete, data-lpignore, data-1p-ignore)<\/li>\n<li>Added debug logging to Stripe portal redirect for troubleshooting broken email links<\/li>\n<\/ul>\n\n<h4>3.3.0<\/h4>\n\n<ul>\n<li>REST protocol unification: all frontend API calls now use REST endpoints with wp_rest nonce<\/li>\n<li>New REST endpoint: POST \/mmax\/v1\/check-email (email check for progressive form flow)<\/li>\n<li>Full implementation of POST \/mmax\/v1\/magic-link (honeypot, bot detection, rate limiting, user creation, token, email)<\/li>\n<li>Removed legacy AJAX handlers (mmax_magic_link_request, mmax_check_email) \u2014 single protocol, single nonce<\/li>\n<li>Simplified frontend JS: removed AJAX FormData helpers, added restPost() utility<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li>Stripe-first checkout: removed identity step from premium flow \u2014 Stripe Checkout handles email + payment in one screen<\/li>\n<li>User creation moved to webhook handler \u2014 eliminates orphan users from abandoned checkouts<\/li>\n<li>Removed mmax_premium_create_user AJAX endpoint (no longer needed)<\/li>\n<li>Terms acceptance moved to pricing step with \"By subscribing\" consent pattern<\/li>\n<li>Subscription status polling now supports session_id for anonymous checkout tracking<\/li>\n<li>Premium flow reduced from 6 screens to 3: pricing \u2192 checkout \u2192 success<\/li>\n<\/ul>\n\n<h4>3.1.0<\/h4>\n\n<ul>\n<li>Cleanup: removed dead templates (membership-form.php, overlay.php, overlay-css.php)<\/li>\n<li>Cleanup: replaced inline style attributes in premium panel with CSS classes<\/li>\n<li>Cleanup: moved payment warning hardcoded colors to CSS variables<\/li>\n<li>Updated health check file list to reflect current template structure<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Premium content: three-state content model (Public \/ Protected \/ Premium) with per-post access control<\/li>\n<li>Stripe Embedded Checkout: in-page subscription flow \u2014 visitors never leave the article<\/li>\n<li>Premium overlay panel with pricing toggle (monthly\/annual), identity step, and checkout state machine<\/li>\n<li>Automatic magic-link email after payment via webhook \u2014 seamless onboarding for new subscribers<\/li>\n<li>Subscription status polling endpoint for real-time checkout confirmation<\/li>\n<li>Subscriber footer on premium posts: plan status, renewal date, and \"Manage subscription\" portal link<\/li>\n<li>Past-due payment banner: non-blocking warning with \"Update payment method\" link, content remains accessible<\/li>\n<li>[mmax_manage_billing] shortcode for site owners who want a dedicated billing page<\/li>\n<li>Magic-link emails now include \"Manage your subscription\" link for paid subscribers<\/li>\n<li>Stripe tab: Premium Content section with level name, Price ID configuration, and verify button<\/li>\n<li>Bulk protection supports Premium access level alongside Public and Protected<\/li>\n<li>Dashboard shows active subscriber count<\/li>\n<li>New AJAX handler for premium user creation (email + Stripe Customer in one step)<\/li>\n<li>Active subscription short-circuit: returning subscribers skip checkout, get a login link instead<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Extracted MMAX_Admin class: admin menu, tab shell, enqueue logic, and Dashboard tab now owned by dedicated module<\/li>\n<li>Modules register admin tabs via mmax_admin_tabs filter with priority sorting and conditional visibility<\/li>\n<li>Bulk Protection moved from submenu to tab (gated behind Personal+ tier)<\/li>\n<li>Removed duplicate Settings submenu entry<\/li>\n<li>Stripe tab now self-registered by MMAX_Stripe module<\/li>\n<li>License and Upgrade tabs now self-registered by MMAX_License module<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Fixed license tier detection: Business licenses were incorrectly displayed as Personal<\/li>\n<li>Added policy inclusion in Keygen API validation requests<\/li>\n<li>Added policy ID fallback for tier resolution<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>In-plugin checkout: purchase a license directly from the Upgrade tab using Stripe Embedded Checkout<\/li>\n<li>Auto-activation: license key is automatically retrieved and activated after payment \u2014 zero redirects, zero copy-paste<\/li>\n<li>New Upgrade tab with pricing table, billing toggle (monthly\/annual), and inline checkout<\/li>\n<li>Welcome screen with license key display, copy-to-clipboard, and email confirmation<\/li>\n<li>Graceful error handling: payment success always preserved, manual activation fallback<\/li>\n<li>Updated third-party services disclosure for Stripe and bridge service<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Migrated plugin licensing from Lemon Squeezy to Keygen CE (self-hosted)<\/li>\n<li>Updated third-party services disclosure for Keygen<\/li>\n<li>License key format updated to match Keygen key structure<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Removed external Google Fonts CDN dependency \u2014 uses system font stack<\/li>\n<li>Added Third-Party Services disclosure section (Lemon Squeezy, Stripe)<\/li>\n<li>Dashboard redesign: onboarding-focused \"Get Started\" steps replace feature cards<\/li>\n<li>WordPress.org submission release<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Email-first progressive form: email step determines signup vs login flow<\/li>\n<li>Returning users skip nickname and terms \u2014 just email and one click<\/li>\n<li>Resend magic link with 60-second cooldown on success screen<\/li>\n<li>Logged-in users without access see upgrade panel instead of signup form<\/li>\n<li>Removed redundant \"Already a member?\" overlay footer<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Rebranded icon from lock to groups \u2014 community over restriction<\/li>\n<li>Updated admin menu, dashboard header, feature cards, and free-tier branding footer<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Improved WordPress.org plugin check compliance<\/li>\n<li>Added readme.txt for WordPress.org submission<\/li>\n<li>Fixed escaping and sanitization throughout<\/li>\n<li>Added translator comments for all translatable strings with placeholders<\/li>\n<li>Added sanitize_callback to all register_setting calls<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Tier restructure: 3 tiers (free, personal, business)<\/li>\n<li>Bulk protection gated behind personal tier<\/li>\n<li>CPT protection gated behind business tier<\/li>\n<li>WordPress.org submission preparation<\/li>\n<\/ul>\n\n<h4>0.9.7<\/h4>\n\n<ul>\n<li>Bulk cutoff shortcode injection and removal<\/li>\n<li>Protect &amp; Add Cutoff \/ Unprotect &amp; Remove Cutoff bulk actions<\/li>\n<\/ul>\n\n<h4>0.9.6<\/h4>\n\n<ul>\n<li>Content protection v2: inline blur and panel overlay system<\/li>\n<li>Author-controlled teasers via [mmax_cutoff] shortcode<\/li>\n<\/ul>\n\n<h4>0.9.5<\/h4>\n\n<ul>\n<li>Unified admin hub with tabbed settings<\/li>\n<li>Brand customization via Style tab<\/li>\n<li>Official lock icon logo<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Initial beta release<\/li>\n<li>Passwordless magic-link authentication<\/li>\n<li>Server-side content protection with teaser extraction<\/li>\n<li>Member management with CSV export<\/li>\n<li>Stripe integration wiring<\/li>\n<li>Lemon Squeezy plugin licensing<\/li>\n<\/ul>","raw_excerpt":"A lightweight membership plugin with passwordless magic-link authentication, server-side content protection, and elegant subscriber onboarding.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/289082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=289082"}],"author":[{"embeddable":true,"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/surfstyk"}],"wp:attachment":[{"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=289082"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=289082"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=289082"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=289082"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=289082"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hi.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=289082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}