{"id":373855,"date":"2026-10-08T06:02:49","date_gmt":"2026-10-08T06:02:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/paywallproject\/"},"modified":"2026-10-28T06:33:52","modified_gmt":"2026-10-28T06:33:52","slug":"paywallproject","status":"publish","type":"plugin","link":"https:\/\/hy.wordpress.org\/plugins\/paywallproject\/","author":18562033,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"4.0.1","stable_tag":"4.0.1","tested":"7.1.3","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"PaywallProject","header_author":"PaywallProject","header_description":"All-in-one paywall and subscription plugin for news publishers and magazines.","assets_banners_color":"f5f5f2","last_updated":"2026-10-28 06:33:52","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/paywallproject.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":201,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.1.0":{"tag":"3.1.0","author":"paywall","date":"2026-10-08 06:08:28","revision":3733758},"4.0.1":{"tag":"4.0.1","author":"paywall","date":"2026-10-28 06:33:52","revision":3770019}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3733754,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3733754,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3733754,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3733754,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.1.0","4.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3733754,"resolution":"1","location":"assets","locale":"","width":2776,"height":2082},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3733754,"resolution":"2","location":"assets","locale":"","width":2752,"height":2064},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3733754,"resolution":"3","location":"assets","locale":"","width":2784,"height":2088},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3733754,"resolution":"4","location":"assets","locale":"","width":2976,"height":2232},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3733754,"resolution":"5","location":"assets","locale":"","width":2704,"height":2028},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3733754,"resolution":"6","location":"assets","locale":"","width":2648,"height":1986}},"screenshots":{"1":"Dashboard with revenue, new subscribers, and the content that converts readers.","2":"The reader's account page: plan, renewal date, profile, and gift articles.","3":"The paywall on an article, asking the reader to create a free account or log in.","4":"Checkout with the plan summary and card payment.","5":"Analytics: revenue, conversion funnel, churn, and gifts over a date range.","6":"The subscribers list with search, filters, and bulk actions."}},"plugin_section":[],"plugin_tags":[17049,12688,12651,5349,4079],"plugin_category":[41,45],"plugin_contributors":[284947],"plugin_business_model":[],"class_list":["post-373855","plugin","type-plugin","status-publish","hentry","plugin_tags-memberships","plugin_tags-paywall","plugin_tags-publishers","plugin_tags-stripe","plugin_tags-subscriptions","plugin_category-communication","plugin_category-ecommerce","plugin_contributors-paywall","plugin_committers-paywall"],"banners":{"banner":"https:\/\/ps.w.org\/paywallproject\/assets\/banner-772x250.png?rev=3733754","banner_2x":"https:\/\/ps.w.org\/paywallproject\/assets\/banner-1544x500.png?rev=3733754","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/paywallproject\/assets\/icon-128x128.png?rev=3733754","icon_2x":"https:\/\/ps.w.org\/paywallproject\/assets\/icon-256x256.png?rev=3733754","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-1.png?rev=3733754","caption":"Dashboard with revenue, new subscribers, and the content that converts readers."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-2.png?rev=3733754","caption":"The reader's account page: plan, renewal date, profile, and gift articles."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-3.png?rev=3733754","caption":"The paywall on an article, asking the reader to create a free account or log in."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-4.png?rev=3733754","caption":"Checkout with the plan summary and card payment."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-5.png?rev=3733754","caption":"Analytics: revenue, conversion funnel, churn, and gifts over a date range."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-6.png?rev=3733754","caption":"The subscribers list with search, filters, and bulk actions."}],"raw_content":"<!--section=description-->\n<p>PaywallProject helps publishers sell access to protected content with Stripe-powered subscriptions, gifts, coupons, subscriber management, and reporting.<\/p>\n\n<p>Learn more, read the documentation and get support at <a href=\"https:\/\/www.paywallproject.com\/\">paywallproject.com<\/a>.<\/p>\n\n<h4>Payments and fees<\/h4>\n\n<p>Payments go through Connect with Stripe. Connect your Stripe account in one click, with no API keys or webhooks to set up. PaywallProject charges a platform fee of 10% on each payment, on top of Stripe's own fees. The fee is shown on the Connect button before you agree to it.<\/p>\n\n<h4>AI Shield<\/h4>\n\n<p>Keep AI companies from crawling your stories while Google, Bing and other search engines index your site as before. Turn it on under Settings \u2192 AI Shield and PaywallProject adds a rule for each AI crawler to your robots.txt \u2014 training crawlers such as GPTBot, ClaudeBot and CCBot, and AI search and assistant fetchers such as ChatGPT-User and PerplexityBot. robots.txt only stops crawlers that respect it, so the tab also gives you a ready-to-copy Cloudflare WAF rule that blocks the same crawlers at the edge, which works even when your pages are served from a full-page cache. Untick any crawler you want to let in. Googlebot, Bingbot, Applebot and DuckDuckBot are never blocked. Off by default.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the third-party services below. Nothing is sent to a service until you configure it.<\/p>\n\n<h4>Stripe<\/h4>\n\n<p>Stripe processes all payments. The plugin calls the Stripe API (api.stripe.com) when a reader checks out, buys a gift, changes or cancels a subscription, when tax is calculated at checkout, and when an administrator manages subscribers or coupons. It sends the reader's email address, name, billing and shipping address, the plan and price, and for tax estimates without an address, the reader's IP address. Checkout pages load Stripe.js from js.stripe.com, which collects card details directly; card numbers never reach your site.<\/p>\n\n<ul>\n<li>Terms: https:\/\/stripe.com\/legal\/ssa<\/li>\n<li>Privacy: https:\/\/stripe.com\/privacy<\/li>\n<\/ul>\n\n<h4>PaywallProject Connect hub (paywallproject.com)<\/h4>\n\n<p>Used for all payments made through Connect with Stripe. Before you connect, the plugin asks the hub for the platform fee rate and sends your site URL. When you connect, disconnect, or refresh the connection, it sends your site URL and the connection credentials. While connected, every Stripe API request listed above goes through the hub (https:\/\/paywallproject.com\/wp-json\/ppconnect\/v1), which forwards it to Stripe and applies the platform fee. That includes the reader data listed under Stripe.<\/p>\n\n<ul>\n<li>Terms: https:\/\/www.paywallproject.com\/terms-of-service\/<\/li>\n<li>Privacy policy: https:\/\/www.paywallproject.com\/privacy-policy\/<\/li>\n<\/ul>\n\n<h4>Google reCAPTCHA<\/h4>\n\n<p>Used only when reCAPTCHA is selected as the signup protection. Registration and checkout forms load the reCAPTCHA script from google.com, which collects data about the visitor's browser. When a form is submitted, the plugin sends the captcha token, your secret key and the visitor's IP address to Google to verify it.<\/p>\n\n<ul>\n<li>Terms: https:\/\/policies.google.com\/terms<\/li>\n<li>Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h4>Cloudflare Turnstile<\/h4>\n\n<p>Used only when Turnstile is selected as the signup protection. Registration and checkout forms load the Turnstile script from challenges.cloudflare.com. When a form is submitted, the plugin sends the Turnstile token, your secret key and the visitor's IP address to Cloudflare to verify it.<\/p>\n\n<ul>\n<li>Terms: https:\/\/www.cloudflare.com\/website-terms\/<\/li>\n<li>Privacy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/li>\n<\/ul>\n\n<h4>Slack<\/h4>\n\n<p>Used only when you enter a Slack webhook URL. When a subscriber signs up, renews or cancels, the plugin posts a message with the subscriber's email address and plan to that webhook.<\/p>\n\n<ul>\n<li>Terms: https:\/\/slack.com\/terms-of-service<\/li>\n<li>Privacy: https:\/\/slack.com\/trust\/privacy\/privacy-policy<\/li>\n<\/ul>\n\n<h4>Outgoing webhooks (Zapier and others)<\/h4>\n\n<p>Used only when you add a webhook URL. On the subscriber events you select, the plugin posts the event name and subscriber details (email address, name, plan and status) to the URL you entered. The data goes to whichever service owns that URL, under that service's terms.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/paywallproject<\/code> directory, or install the plugin through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the Plugins screen in WordPress.<\/li>\n<li>Go to PaywallProject, choose Connect with Stripe, and set up your access settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20require%20stripe%3F\"><h3>Does this require Stripe?<\/h3><\/dt>\n<dd><p>Yes. Stripe is the supported payment gateway for this version.<\/p><\/dd>\n<dt id=\"is%20there%20a%20fee%3F\"><h3>Is there a fee?<\/h3><\/dt>\n<dd><p>Yes. PaywallProject takes a platform fee of 10% of each payment made through Connect with Stripe. Stripe's own fees apply as well.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20help%3F\"><h3>Where can I get help?<\/h3><\/dt>\n<dd><p>Visit <a href=\"https:\/\/www.paywallproject.com\/\">paywallproject.com<\/a> for guides and support, or post in the plugin's support forum here on WordPress.org.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>4.0.1<\/h4>\n\n<ul>\n<li>Security: Hardened the 3-D Secure checkout finalization.<\/li>\n<li>Security: Hardened how REST requests from logged-in members are authenticated.<\/li>\n<li>Security: Removed the endpoint that revealed whether an email address has an account, and finishing a free signup now requires the verified one-time code.<\/li>\n<li>Security: Every public route, admin form and database query is now checked, sanitized, prepared and escaped, following the WordPress.org plugin review.<\/li>\n<li>Fix: The Newsletter Glue \"Sync all subscribers\" button in Tools no longer crashes.<\/li>\n<\/ul>\n\n<h4>4.0.0<\/h4>\n\n<ul>\n<li>Breaking: The <code>PPACCESS_MANAGED_INSTALL<\/code> constant and the <code>ppaccess_managed_install<\/code> and <code>ppaccess_offer_own_stripe_keys<\/code> filters were removed. Payments now go through Connect with Stripe only. Sites already charging with stored keys keep working.<\/li>\n<li>Feature: AI Shield \u2014 a new Settings \u2192 AI Shield tab, off by default, adds robots.txt rules that turn away AI training crawlers and AI search fetchers while Google, Bing and other search engines keep indexing. Pick the bots one by one, and copy a ready-made Cloudflare WAF rule for pages a CDN cache serves before WordPress sees them. The tab warns when a physical robots.txt file or an SEO plugin's rules still let a blocked crawler in.<\/li>\n<li>Feature: Newsletter Glue integration \u2014 keep a Newsletter Glue list in step with your subscribers, with their status, access, plan and expiry date as custom fields and ready-made \"has access\" \/ \"no access\" segments. It never unsubscribes anyone, and a Tools card backfills existing subscribers. Readers can also join and leave your newsletters and topics from a new Newsletters card in My Account. Off until you enable it.<\/li>\n<li>Feature: Coupons can now discount recurring payments \u2014 choose the first payment only, a number of months, or every payment. Existing coupons keep discounting the first payment only, and editing a coupon now applies to the next checkout or plan change.<\/li>\n<li>Feature: A <code>subscriber.plan_changed<\/code> webhook is sent when a subscriber upgrades or downgrades \u2014 from the admin, My Account or Stripe \u2014 carrying both plans.<\/li>\n<li>Feature: Subscribers can upload, change or remove a profile photo on the My Account page. It becomes their avatar across the site.<\/li>\n<li>Improvement: Free plans now use the site's checkout layout, including the standalone checkout, and email domains restrict free plans as well as paid ones. Each restricted plan can say who it is for, such as \"Free for Meeker School District staff\".<\/li>\n<li>Improvement: A post that names a free level can now turn off the free sign-up form on its paywall and show the plans instead. Subscribers on the free level still read it.<\/li>\n<li>Improvement: The own-key Stripe fields, the webhook setup button and the managed-install mode are gone from Settings; Connect with Stripe is the one way to take payments.<\/li>\n<li>Improvement: Ready for WordPress.org: the text domain is now <code>paywallproject<\/code>, the \"Secure checkout powered by Stripe\" line is removed, and readme.txt lists every external service the plugin contacts. Tested up to WordPress 7.1.<\/li>\n<li>Security: Content inside the gating shortcodes is now sanitized, paywall container selectors are validated before they reach CSS, and request input, cookies and inline scripts are sanitized and escaped throughout.<\/li>\n<li>Fix: A subscriber who bought the plan they already held was charged again for the same period. Checkout now refuses it.<\/li>\n<li>Fix: A Stripe key saved in the wrong mode \u2014 a live key in the test slot, for example \u2014 is now refused, so a site set to test mode can never charge a real card.<\/li>\n<li>Fix: Checkout failed for a recurring pay-what-you-want level that had no Stripe product.<\/li>\n<li>Fix: The coupon field on the stepped checkout no longer sits flush against the fields above it.<\/li>\n<\/ul>\n\n<p>Older releases are listed in changelog.txt.<\/p>","raw_excerpt":"All-in-one paywall and subscription plugin for news publishers and magazines.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/373855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=373855"}],"author":[{"embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/paywall"}],"wp:attachment":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=373855"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=373855"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=373855"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=373855"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=373855"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=373855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}