{"id":209577,"date":"2024-11-12T05:36:58","date_gmt":"2024-11-12T05:36:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/login-for-stripe-customer-portal\/"},"modified":"2026-05-28T09:37:52","modified_gmt":"2026-05-28T09:37:52","slug":"login-stripe-customer-portal","status":"publish","type":"plugin","link":"https:\/\/pt.wordpress.org\/plugins\/login-stripe-customer-portal\/","author":16742394,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.0","requires":"5.0","requires_php":"7.2","requires_plugins":null,"header_name":"Login for Stripe Customer Portal","header_author":"Gaucho Plugins","header_description":"Allow merchants to connect Stripe and provide a customer login endpoint for the Stripe Customer Portal.","assets_banners_color":"b8d9fb","last_updated":"2026-05-28 09:37:52","external_support_url":"https:\/\/customerportalplugin.com\/support\/","external_repository_url":"","donate_link":"https:\/\/customerportalplugin.com\/","header_plugin_uri":"","header_author_uri":"https:\/\/gauchoplugins.com\/","rating":5,"author_block_rating":0,"active_installs":10,"downloads":1537,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"brandonfire","date":"2024-11-12 05:36:44"},"1.0.1":{"tag":"1.0.1","author":"brandonfire","date":"2024-11-17 06:40:34"},"1.0.2":{"tag":"1.0.2","author":"brandonfire","date":"2024-11-17 07:23:32"},"1.0.3":{"tag":"1.0.3","author":"brandonfire","date":"2025-04-21 22:21:03"},"1.0.4":{"tag":"1.0.4","author":"brandonfire","date":"2026-05-24 11:34:29"},"1.0.5":{"tag":"1.0.5","author":"brandonfire","date":"2026-05-24 13:34:27"},"1.0.6":{"tag":"1.0.6","author":"brandonfire","date":"2026-05-24 21:22:44"},"1.1.0":{"tag":"1.1.0","author":"brandonfire","date":"2026-05-28 09:37:52"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3552241,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3552241,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3552237,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3190489,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3190489,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3552271,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Login for Stripe Customer Portal \\u2014 Live Preview\",\"description\":\"Try Login for Stripe Customer Portal in your browser. Create a branded account login area for your Stripe customers with secure magic-link authentication.\",\"author\":\"Gaucho Plugins\",\"categories\":[\"Plugin\"]},\"landingPage\":\"\\\/wp-admin\\\/plugins.php\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"options\":{\"activate\":true},\"progress\":{\"weight\":3},\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"login-stripe-customer-portal\"}}]}"}},"all_blocks":[],"tagged_versions":["1.0","1.0.1","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3190481,"resolution":"1","location":"assets","locale":"","width":1200,"height":700},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3190481,"resolution":"2","location":"assets","locale":"","width":1200,"height":700},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3190481,"resolution":"3","location":"assets","locale":"","width":1200,"height":700},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3190481,"resolution":"4","location":"assets","locale":"","width":1200,"height":700},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3190481,"resolution":"5","location":"assets","locale":"","width":1200,"height":700}},"screenshots":{"1":"Settings page \u2014 Stripe API key, redirect URL, customer portal slug.","2":"Public login form \u2014 customer enters their email.","3":"Confirmation message \u2014 inline, on the same page (1.1.0 UX fix).","4":"Magic-link email \u2014 branded template preview (PRO).","5":"Form-styler \u2014 brand color + heading + button (PRO).","6":"Multi-Stripe-account \u2014 multiple accounts on one site, each at its own URL slug (PRO).","7":"Webhook listener \u2014 assign WP roles on Stripe events (PRO).","8":"WooCommerce integration \u2014 Manage Billing button on My Account (PRO)."}},"plugin_section":[],"plugin_tags":[2152,5593,602,4538,5349],"plugin_category":[38,45],"plugin_contributors":[168740,78154,183974],"plugin_business_model":[216238],"class_list":["post-209577","plugin","type-plugin","status-publish","hentry","plugin_tags-account","plugin_tags-customer","plugin_tags-login","plugin_tags-portal","plugin_tags-stripe","plugin_category-authentication","plugin_category-ecommerce","plugin_contributors-brandonfire","plugin_contributors-freemius","plugin_contributors-gauchoplugins","plugin_business_model-commercial","plugin_committers-brandonfire","plugin_support_reps-brandonfire","plugin_support_reps-gauchoplugins"],"banners":{"banner":"https:\/\/ps.w.org\/login-stripe-customer-portal\/assets\/banner-772x250.png?rev=3190489","banner_2x":"https:\/\/ps.w.org\/login-stripe-customer-portal\/assets\/banner-1544x500.png?rev=3190489","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/login-stripe-customer-portal\/assets\/icon.svg?rev=3552237","icon":"https:\/\/ps.w.org\/login-stripe-customer-portal\/assets\/icon.svg?rev=3552237","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/login-stripe-customer-portal\/assets\/screenshot-1.png?rev=3190481","caption":"Settings page \u2014 Stripe API key, redirect URL, customer portal slug."},{"src":"https:\/\/ps.w.org\/login-stripe-customer-portal\/assets\/screenshot-2.png?rev=3190481","caption":"Public login form \u2014 customer enters their email."},{"src":"https:\/\/ps.w.org\/login-stripe-customer-portal\/assets\/screenshot-3.png?rev=3190481","caption":"Confirmation message \u2014 inline, on the same page (1.1.0 UX fix)."},{"src":"https:\/\/ps.w.org\/login-stripe-customer-portal\/assets\/screenshot-4.png?rev=3190481","caption":"Magic-link email \u2014 branded template preview (PRO)."},{"src":"https:\/\/ps.w.org\/login-stripe-customer-portal\/assets\/screenshot-5.png?rev=3190481","caption":"Form-styler \u2014 brand color + heading + button (PRO)."}],"raw_content":"<!--section=description-->\n<p><strong>The fastest way to put a branded Stripe Customer Portal login page on your WordPress site \u2014 no passwords, no developer required.<\/strong><\/p>\n\n<p>Customers want to update their card, change their plan, or download an invoice WITHOUT emailing support. Stripe's Customer Portal already does all of that \u2014 what's been missing is a clean, branded <strong>login entry point on your own domain<\/strong>.<\/p>\n\n<p><strong>Login for Stripe Customer Portal<\/strong> solves that in 60 seconds: paste your Stripe Secret Key, save, and a passwordless magic-link form is live on your site. Customers enter their email, click the link in their inbox, and land directly inside Stripe's hosted Customer Portal \u2014 already authenticated.<\/p>\n\n<p><a href=\"https:\/\/customerportalplugin.com\/\">https:\/\/customerportalplugin.com\/<\/a> \u2014 visit the website to see the plugin in action, browse the email template gallery, and view the PRO feature tour.<\/p>\n\n<h3>\u2705 FREE FEATURES<\/h3>\n\n<ul>\n<li><strong>\ud83d\udd10 Stripe Customer Portal login<\/strong> \u2014 connect your Stripe account, customers manage billing themselves.<\/li>\n<li><strong>\u2709\ufe0f Magic-link email authentication<\/strong> \u2014 one-time link valid for 1 hour; no passwords to manage.<\/li>\n<li><strong>\ud83e\udde9 Shortcode embed<\/strong> \u2014 drop <code>[login-stripe-customer-portal]<\/code> on any page; works multiple times on one page.<\/li>\n<li><strong>\ud83d\udcac Inline confirmation<\/strong> \u2014 submissions stay on your page (new in 1.1.0 \u2014 no more blank <code>wp_die<\/code> screens).<\/li>\n<li><strong>\ud83d\udd17 Custom URL slug<\/strong> \u2014 host the login at <code>yoursite.com\/billing\/<\/code>, <code>\/account\/<\/code>, or any path you like.<\/li>\n<li><strong>\u21a9\ufe0f Custom return URL<\/strong> \u2014 pick where customers land after logging out of Stripe's portal.<\/li>\n<li><strong>\ud83c\udf9b\ufe0f Existing-customer gate<\/strong> \u2014 optionally restrict access to email addresses that already have a Stripe customer record.<\/li>\n<li><strong>\ud83d\udee1\ufe0f Security hardened<\/strong> \u2014 SHA-256 token hashing, per-email + per-IP rate limiting, CSRF nonces, no enumeration oracle.<\/li>\n<li><strong>\ud83c\uddea\ud83c\uddfa GDPR-compliant<\/strong> \u2014 exporter + eraser registered with WordPress Privacy Tools out of the box.<\/li>\n<li><strong>\ud83e\uddf0 WP-CLI commands<\/strong> \u2014 <code>wp lscp purge-tokens \/ limiter-reset \/ send \/ config<\/code>.<\/li>\n<li><strong>\ud83e\uddf9 Daily token cleanup<\/strong> \u2014 WP-Cron sweep removes expired magic-link tokens automatically.<\/li>\n<li><strong>\ud83e\uddd1\u200d\ud83d\udcbb Developer extension surface<\/strong> \u2014 12+ filters and actions for customizing every stage of the flow.<\/li>\n<\/ul>\n\n<p>\ud83d\udcd5 <a href=\"https:\/\/docs.customerportalplugin.com\/\">Documentation<\/a> \u00b7 \ud83c\udd98 <a href=\"https:\/\/wordpress.org\/support\/plugin\/login-stripe-customer-portal\/\">Support forum<\/a> \u00b7 \ud83c\udf10 <a href=\"https:\/\/customerportalplugin.com\/\">Website<\/a><\/p>\n\n<h3>\ud83d\ude80 UNLOCK MORE WITH PRO<\/h3>\n\n<p>Need branded emails, a styled login form, role automation on Stripe events, or to run multiple Stripe accounts from one site? <strong><a href=\"https:\/\/customerportalplugin.com\/pricing\/\">Upgrade to PRO<\/a><\/strong> \u2014 every license tier includes every feature, including white-label.<\/p>\n\n<p><a href=\"https:\/\/customerportalplugin.com\/pricing\/\"><strong>\ud83d\udc49 Compare PRO plans on the website<\/strong><\/a><\/p>\n\n<h4>\ud83c\udfa8 Branded magic-link emails<\/h4>\n\n<p>Replace the plain HTML email with one of <strong>6 pre-built templates<\/strong> (Minimal, Card, Bold, Stripe-like, Newsletter, Card-with-logo). Pick a brand color, drop in your logo URL, customize the subject \/ heading \/ CTA \/ footer \u2014 every change is shown in a <strong>live preview iframe<\/strong> inside the admin BEFORE you save. No \"send a test email\" loop required.<\/p>\n\n<h4>\ud83d\udc85 Login-form styler<\/h4>\n\n<p>Style the public login form to match your site \u2014 <strong>6 form templates<\/strong> (Minimal, Card, Inline, Full-width, Centered, Branded), brand color, custom heading \/ subheading \/ button label \/ email placeholder, all with the same live-preview iframe.<\/p>\n\n<h4>\ud83d\udd17 WP user \u2194 Stripe customer bridge<\/h4>\n\n<p>Pre-fill the magic-link form for logged-in WP users (one click instead of typing). On every successful redemption, link the Stripe customer id to the WP user as <code>_lscp_stripe_customer_id<\/code> user-meta \u2014 your other plugins and themes can read it. Optionally auto-create the WP user (with a configurable default role) the first time someone redeems.<\/p>\n\n<h4>\ud83d\uded2 WooCommerce \/ MemberPress \/ LearnDash integration<\/h4>\n\n<p>Adds a configurable <strong>\"Manage Billing\"<\/strong> button to:<\/p>\n\n<ul>\n<li>The <strong>WooCommerce My Account<\/strong> dashboard (classic <em>and<\/em> block-based templates).<\/li>\n<li>The <strong>MemberPress<\/strong> account home.<\/li>\n<li>The <strong>LearnDash<\/strong> profile page (<code>[ld_profile]<\/code>).<\/li>\n<\/ul>\n\n<p>One click sends the user to your branded portal login \u2014 pre-filled with their email if they're logged in.<\/p>\n\n<h4>\ud83e\ude9d Stripe webhooks \u2192 WP role automation<\/h4>\n\n<blockquote>\n  <p><strong>PRO-only feature.<\/strong> The webhook REST endpoint, signature verification, and idempotency cache all ship in the PRO build. Without PRO, Stripe events sent to your site are not processed by this plugin \u2014 subscription state will not auto-sync to WP roles. If you only need the public login form + portal redirect, FREE is enough.<\/p>\n<\/blockquote>\n\n<p>A REST endpoint (<code>\/wp-json\/lscp\/v1\/webhook<\/code>) verifies the Stripe <code>Stripe-Signature<\/code> header (HMAC-SHA256 + 5-minute timestamp tolerance, constant-time compare) and <strong>automates WordPress role changes<\/strong> on the events that matter:<\/p>\n\n<ul>\n<li><code>customer.subscription.created<\/code> \/ <code>.updated<\/code> \u2192 assign your configured \"active\" role.<\/li>\n<li><code>customer.subscription.deleted<\/code> \u2192 remove the role (or assign a downgrade role).<\/li>\n<li><code>invoice.payment_failed<\/code> \u2192 assign your \"past due\" role.<\/li>\n<li><code>invoice.paid<\/code> \u2192 fire an extensible action (<code>lscp_pro_webhook_invoice_paid<\/code>).<\/li>\n<\/ul>\n\n<p>7-day SHA-256-keyed idempotency cache means Stripe retries are safe \u2014 no double-firing.<\/p>\n\n<h4>\ud83c\udf10 Multi-Stripe-account routing<\/h4>\n\n<p>Run <strong>multiple Stripe accounts from one WordPress install<\/strong>. Each account gets its own URL slug (<code>\/billing-eu\/<\/code>, <code>\/billing-us\/<\/code>), API key, validate-existing toggle, redirect URL, and From email. Requests are routed transparently via WordPress's <code>pre_option_*<\/code> filters \u2014 the FREE plugin code is unchanged.<\/p>\n\n<h4>\ud83c\udff7\ufe0f Agency white-label<\/h4>\n\n<p>Replace \"Powered by Gaucho Plugins\" with your own brand name across every admin string. Hide the upgrade prompts entirely. <strong>Included with every PRO tier<\/strong> \u2014 no need to buy the most expensive plan.<\/p>\n\n<h4>\ud83d\udc8c Priority email support<\/h4>\n\n<p>PRO customers get a dedicated support inbox \u2014 typical reply within one business day.<\/p>\n\n<h4>\ud83d\udcb5 PRO licensing<\/h4>\n\n<p>Every PRO tier unlocks every PRO feature, white-label included. Tiers differ only in how many sites a license covers.<\/p>\n\n<p><a href=\"https:\/\/customerportalplugin.com\/pricing\/\"><strong>\ud83d\udc49 Compare plans on the website<\/strong><\/a><\/p>\n\n<h3>\u2705 PERFECT FOR<\/h3>\n\n<ul>\n<li><strong>SaaS founders<\/strong> using Stripe Billing who want customers to self-serve.<\/li>\n<li><strong>Membership sites<\/strong> that need a branded billing portal.<\/li>\n<li><strong>WooCommerce stores<\/strong> using Stripe Subscriptions (PRO adds the My Account button).<\/li>\n<li><strong>MemberPress \/ LearnDash sites<\/strong> that want a one-click Manage Billing entry point.<\/li>\n<li><strong>Digital agencies<\/strong> managing client portfolios with multiple Stripe accounts.<\/li>\n<\/ul>\n\n<h3>\ud83e\udd1d WORKS WITH<\/h3>\n\n<ul>\n<li><strong>Stripe Billing<\/strong> (subscriptions, invoices, customer portal) \u2014 required.<\/li>\n<li><strong>WooCommerce<\/strong> \u2014 PRO integration adds the Manage Billing button to My Account.<\/li>\n<li><strong>MemberPress<\/strong> \u2014 PRO integration adds the button to the account page.<\/li>\n<li><strong>LearnDash<\/strong> \u2014 PRO integration adds the button to the profile page.<\/li>\n<li>Any WordPress theme \u2014 classic <em>or<\/em> block-based.<\/li>\n<li>Any caching plugin (the rewrite endpoint marks itself uncacheable).<\/li>\n<li>WP Mail SMTP, FluentSMTP, Brevo, SendGrid, Postmark, etc. (uses standard <code>wp_mail<\/code>).<\/li>\n<\/ul>\n\n<h3>\ud83d\udcda RESOURCES<\/h3>\n\n<ul>\n<li><strong>Website:<\/strong> <a href=\"https:\/\/customerportalplugin.com\/\">customerportalplugin.com<\/a><\/li>\n<li><strong>Documentation:<\/strong> <a href=\"https:\/\/docs.customerportalplugin.com\/\">docs.customerportalplugin.com<\/a><\/li>\n<li><strong>Pricing &amp; PRO upgrade:<\/strong> <a href=\"https:\/\/customerportalplugin.com\/pricing\/\">customerportalplugin.com\/pricing<\/a><\/li>\n<li><strong>Changelog:<\/strong> <a href=\"https:\/\/customerportalplugin.com\/changelog\/\">customerportalplugin.com\/changelog<\/a><\/li>\n<li><strong>Free support:<\/strong> <a href=\"https:\/\/wordpress.org\/support\/plugin\/login-stripe-customer-portal\/\">WordPress.org support forum<\/a><\/li>\n<li><strong>PRO support:<\/strong> included with every PRO license<\/li>\n<\/ul>\n\n<h3>\ud83e\uddf0 GAUCHO PLUGINS PORTFOLIO<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/payment-page\/\"><strong>Payment Page<\/strong><\/a> \u2014 Stripe payment forms in under 60 seconds.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/bsd-woo-stripe-connect-split-pay\/\"><strong>Split Pay<\/strong><\/a> \u2014 Split WooCommerce payments across multiple connected Stripe accounts.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/gyta-buyback\/\"><strong>Gyta Buyback<\/strong><\/a> \u2014 Trade-in \/ buyback for WooCommerce.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/wp-stripe-global-payments\/\"><strong>China Payments<\/strong><\/a> \u2014 WeChat Pay + Alipay in WooCommerce.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/speed-in-china\/\"><strong>Speed in China<\/strong><\/a> \/ <a href=\"https:\/\/wordpress.org\/plugins\/blocked-in-china\/\"><strong>Blocked in China<\/strong><\/a> \u2014 China-region site diagnostics.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/version-info\/\"><strong>Version Info<\/strong><\/a> \u2014 WP, PHP, MySQL, web-server versions in the admin dashboard.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the following external services.<\/p>\n\n<h4>Stripe (api.stripe.com)<\/h4>\n\n<p>This plugin uses your Stripe Secret API key to authenticate customers and generate secure links to the Stripe Customer Portal. Customer email addresses are sent to Stripe when a user requests a login link. Stripe hosts the Customer Portal where customers manage billing information.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/stripe.com\/legal\/ssa\">Stripe Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/stripe.com\/privacy\">Stripe Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Freemius (api.freemius.com, freemius.com)<\/h4>\n\n<p>This plugin includes the Freemius SDK for license and update management. Data is sent to Freemius only when you opt in through the Freemius connect screen.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/freemius.com\/terms\/\">Freemius Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/freemius.com\/privacy\/\">Freemius Privacy Policy<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/<\/code> or install through the WordPress plugins screen.<\/li>\n<li>Activate via the Plugins screen.<\/li>\n<li>Navigate to <strong>Stripe Portal<\/strong> in the WordPress admin menu.<\/li>\n<li>Paste your Stripe Secret API key, pick a slug for the login page (e.g. <code>customer-portal<\/code>), set a return URL, and save.<\/li>\n<li>Visit <code>yourdomain.com\/&lt;your-slug&gt;\/<\/code> to see the login form \u2014 or drop <code>[login-stripe-customer-portal]<\/code> on any page.<\/li>\n<li>(Recommended) Go to <strong>Settings \u2192 Permalinks \u2192 Save<\/strong> once after changing the slug.<\/li>\n<\/ol>\n\n<p>Full setup guide: <a href=\"https:\/\/docs.customerportalplugin.com\/\">docs.customerportalplugin.com<\/a><\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20problem%20does%20this%20plugin%20solve%3F\"><h3>What problem does this plugin solve?<\/h3><\/dt>\n<dd><p>Stripe's hosted Customer Portal is great, but the URL to access it is unique per customer and not shareable. This plugin puts a clean <strong>public login page on your own domain<\/strong> so customers can enter their email and get an instant magic-link to their portal session \u2014 without needing a password, your support team, or a custom Stripe API integration.<\/p><\/dd>\n<dt id=\"do%20i%20need%20pro%20to%20use%20the%20plugin%3F\"><h3>Do I need PRO to use the plugin?<\/h3><\/dt>\n<dd><p>No. The free version on WordPress.org has everything you need to put a working magic-link Stripe portal login on your site: shortcode embed, custom URL slug, GDPR tools, rate limiting, SHA-256-hashed tokens, WP-CLI commands. PRO adds branding, integrations, webhook automation, and multi-account routing.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20my%20stripe%20secret%20api%20key%3F\"><h3>How do I get my Stripe Secret API key?<\/h3><\/dt>\n<dd><p>Log into your Stripe Dashboard \u2192 Developers \u2192 API keys. Copy the Secret Key (starts with <code>sk_live_\u2026<\/code> for live mode or <code>sk_test_\u2026<\/code> for test mode). Paste it into <strong>Stripe Portal \u2192 Settings<\/strong>.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20login%20page%20styling%3F\"><h3>Can I customize the login page styling?<\/h3><\/dt>\n<dd><p>Yes \u2014 two ways:<\/p>\n\n<ul>\n<li><strong>Free:<\/strong> Add custom CSS targeting <code>.lscp-portal-form<\/code>. The form HTML is fully filterable via the <code>lscp_form_template<\/code> filter for advanced theming.<\/li>\n<li><strong>PRO:<\/strong> Use the built-in form styler \u2014 6 templates, brand color pickers, custom heading\/button label, live preview in admin. No CSS required.<\/li>\n<\/ul><\/dd>\n<dt id=\"can%20i%20brand%20the%20magic-link%20email%3F\"><h3>Can I brand the magic-link email?<\/h3><\/dt>\n<dd><ul>\n<li><strong>Free:<\/strong> the email body is filterable via <code>lscp_email_html_body<\/code> (developer route).<\/li>\n<li><strong>PRO:<\/strong> pick from 6 pre-built templates in the admin, set your brand color + logo + custom heading\/CTA, see a live preview as you type.<\/li>\n<\/ul><\/dd>\n<dt id=\"does%20the%20plugin%20replace%20woocommerce%20%2F%20memberpress%20%2F%20learndash%20billing%3F\"><h3>Does the plugin replace WooCommerce \/ MemberPress \/ LearnDash billing?<\/h3><\/dt>\n<dd><p>No \u2014 it complements them. Your Stripe products, subscriptions, and billing logic stay in Stripe. With PRO, a <strong>\"Manage Billing\"<\/strong> button gets added to the WC \/ MP \/ LD account page so logged-in customers go to your branded portal login in one click.<\/p><\/dd>\n<dt id=\"how%20does%20the%20magic%20link%20login%20actually%20work%3F\"><h3>How does the magic link login actually work?<\/h3><\/dt>\n<dd><ol>\n<li>Customer enters their email on your login form.<\/li>\n<li>Plugin (rate-limited) issues a single-use token, stores its SHA-256 hash as a 1-hour transient, and emails the customer a link.<\/li>\n<li>Customer clicks the link \u2192 token is verified, marked used, and the Stripe Customer Portal session is created.<\/li>\n<li>Customer is redirected to Stripe's hosted portal \u2014 already authenticated.<\/li>\n<\/ol>\n\n<p>The token never appears in your database in cleartext. The link expires after one hour or after a single use, whichever comes first.<\/p><\/dd>\n<dt id=\"can%20i%20run%20multiple%20stripe%20accounts%20on%20one%20site%3F\"><h3>Can I run multiple Stripe accounts on one site?<\/h3><\/dt>\n<dd><p>Yes, with PRO. The Multi-Account tab lets you add as many Stripe accounts as your license allows, each with its own URL slug, API key, redirect URL, and from email. The free version is single-account.<\/p><\/dd>\n<dt id=\"does%20the%20webhook%20listener%20handle%20stripe%20retries%20safely%3F\"><h3>Does the webhook listener handle Stripe retries safely?<\/h3><\/dt>\n<dd><p>Yes. PRO's webhook endpoint dedupes by Stripe <code>event.id<\/code> with a 7-day SHA-256-keyed transient \u2014 a retried event returns <code>200 {\"replayed\": true}<\/code> without re-firing your role automation rules.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20gdpr%20compliant%3F\"><h3>Is the plugin GDPR compliant?<\/h3><\/dt>\n<dd><p>Yes. The free version registers a Privacy Tools exporter and eraser so site owners can satisfy data subject access and erasure requests via <strong>Tools \u2192 Export \/ Erase Personal Data<\/strong>.<\/p><\/dd>\n<dt id=\"where%20can%20i%20find%20the%20changelog%3F\"><h3>Where can I find the changelog?<\/h3><\/dt>\n<dd><p>Recent changes are below. The full changelog (every release) is at <a href=\"https:\/\/customerportalplugin.com\/changelog\/\">customerportalplugin.com\/changelog<\/a>.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><ul>\n<li><strong>Free:<\/strong> <a href=\"https:\/\/wordpress.org\/support\/plugin\/login-stripe-customer-portal\/\">WordPress.org support forum<\/a>.<\/li>\n<li><strong>PRO:<\/strong> priority email support is included with every PRO license.<\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p>Only the current version is shown here. The full release history is in <code>changelog.txt<\/code> (bundled with the plugin) and at <a href=\"https:\/\/customerportalplugin.com\/changelog\/\">customerportalplugin.com\/changelog<\/a>.<\/p>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New (FREE): Inline confirmation message \u2014 form submissions no longer land on a blank <code>wp_die<\/code> screen.<\/li>\n<li>New (FREE): <code>[lscp-message]<\/code> shortcode for rendering the success\/error message on a custom page.<\/li>\n<li>New (FREE): Tabbed settings page; developer extension surface (12+ filters and actions).<\/li>\n<li>New (PRO): Branded magic-link emails \u2014 6 templates with live preview.<\/li>\n<li>New (PRO): Login-form styler \u2014 6 templates with live preview.<\/li>\n<li>New (PRO): WP user \u2194 Stripe customer bridge (auto-link, pre-fill, optional auto-create).<\/li>\n<li>New (PRO): WooCommerce \/ MemberPress \/ LearnDash integrations (Manage Billing button).<\/li>\n<li>New (PRO): Stripe webhook listener with WP role automation (HMAC-verified, idempotent).<\/li>\n<li>New (PRO): Multi-Stripe-account routing \u2014 multiple accounts at different URL slugs.<\/li>\n<li>New (PRO): Agency white-label \u2014 included at every license tier.<\/li>\n<\/ul>","raw_excerpt":"Stripe Customer Portal login for WordPress \u2014 passwordless magic-link email, branded login page, [shortcode] embed, GDPR-ready.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/209577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=209577"}],"author":[{"embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brandonfire"}],"wp:attachment":[{"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=209577"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=209577"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=209577"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=209577"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=209577"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=209577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}