{"id":349083,"date":"2026-08-07T16:13:18","date_gmt":"2026-08-07T16:13:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/lapdi-member-portal\/"},"modified":"2026-08-07T16:12:46","modified_gmt":"2026-08-07T16:12:46","slug":"lapdi-member-portal","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/lapdi-member-portal\/","author":12673272,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.3","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"LAPDI Member Portal","header_author":"Let A Pro Do IT!","header_description":"Gate protected pages to logged-in members and give them a self-service account page.","assets_banners_color":"04162e","last_updated":"2026-08-07 16:12:46","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/buymeacoffee.com\/letaprodoit","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/lapdi-member-portal\/","header_author_uri":"https:\/\/letaprodoit.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":55,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"sharrondenice","date":"2026-08-07 16:12:46"}},"upgrade_notice":{"1.0.0":"<p>First general release. If upgrading from the earlier single-site build, roles\/capabilities migrate automatically \u2014 no action needed.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3638080,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3638080,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3638080,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3638080,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[1912,602,1919,1932,11466],"plugin_category":[38,58],"plugin_contributors":[273861,82727],"plugin_business_model":[],"class_list":["post-349083","plugin","type-plugin","status-publish","hentry","plugin_tags-access-control","plugin_tags-login","plugin_tags-members","plugin_tags-membership","plugin_tags-protected-content","plugin_category-authentication","plugin_category-user-management","plugin_contributors-letaprodoit","plugin_contributors-sharrondenice","plugin_committers-sharrondenice"],"banners":{"banner":"https:\/\/ps.w.org\/lapdi-member-portal\/assets\/banner-772x250.jpg?rev=3638080","banner_2x":"https:\/\/ps.w.org\/lapdi-member-portal\/assets\/banner-1544x500.jpg?rev=3638080","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/lapdi-member-portal\/assets\/icon-128x128.jpg?rev=3638080","icon_2x":"https:\/\/ps.w.org\/lapdi-member-portal\/assets\/icon-256x256.jpg?rev=3638080","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>LAPDI Member Portal gates protected pages, post types and other plugins' member-only content to logged-in users, and gives members a self-service front-end account page. It ships with sensible, universal defaults and is fully configurable from its own settings screen \u2014 nothing is hardcoded to any one site's setup.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>A front-end account\/login page with a nonce-protected profile form (first name, last name, display name, email)<\/li>\n<li>Configurable <strong>access capability<\/strong> gating protected content \u2014 defaults to <code>read<\/code>, which every logged-in WordPress user already has, so it works out of the box on any site<\/li>\n<li>Editable, autocompleting <strong>protected page paths<\/strong> and <strong>protected post types<\/strong> lists \u2014 click either field to see every page\/post type already on the site<\/li>\n<li>Editable <strong>member capabilities<\/strong> granted to the Portal Member role (and Administrator), for other plugins\/theme code to check against<\/li>\n<li>A <code>Portal Member<\/code> role, created automatically on activation<\/li>\n<li><code>[lapdi_member_account]<\/code> shortcode for the account page<\/li>\n<li>WordPress-native password recovery and nonce-protected logout<\/li>\n<li><code>noindex,nofollow<\/code> on account and protected front-end requests<\/li>\n<\/ul>\n\n<h4>Required framework<\/h4>\n\n<p>LAPDI Member Portal requires TSP Easy Dev to be installed and active. WordPress blocks activation until that dependency is available and active.<\/p>\n\n<h4>Works with LAPDI Events<\/h4>\n\n<p>If <a href=\"https:\/\/wordpress.org\/plugins\/lapdi-events\/\">LAPDI Events<\/a> is also active, its \"Members only\" event visibility automatically defers to this plugin's configured access capability \u2014 no extra setup required.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate TSP Easy Dev.<\/li>\n<li>Upload the plugin under <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong> and activate it.<\/li>\n<li>Activation creates the <code>Portal Member<\/code> role and creates (or fills, if empty) an Account page containing <code>[lapdi_member_account]<\/code>.<\/li>\n<li>Open <strong>LAPDI Plugins \u2192 Member Portal<\/strong> to review or change the access capability, protected page paths, protected post types, and member capabilities \u2014 all editable from that screen.<\/li>\n<li>Confirm the protected paths\/post types match your site's actual structure; the settings screen lists everything currently on the site to choose from.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20to%20create%20a%20custom%20role%20or%20capability%20myself%3F\"><h3>Do I need to create a custom role or capability myself?<\/h3><\/dt>\n<dd><p>No. The plugin creates a <code>Portal Member<\/code> role automatically and grants it a safe default (<code>read<\/code>) for protected-content access. Only change the access capability if your site already has its own membership capability you'd rather gate on instead.<\/p><\/dd>\n<dt id=\"how%20do%20i%20protect%20an%20additional%20page%20or%20post%20type%3F\"><h3>How do I protect an additional page or post type?<\/h3><\/dt>\n<dd><p>Open <strong>LAPDI Plugins \u2192 Member Portal<\/strong>, and add the page slug or post type in the relevant field \u2014 start typing or click into the field to see suggestions drawn from your site's actual pages\/post types.<\/p><\/dd>\n<dt id=\"what%20personal%20data%20does%20the%20plugin%20store%3F\"><h3>What personal data does the plugin store?<\/h3><\/dt>\n<dd><p>The account form updates the current user's standard WordPress first name, last name, display name and email fields. WordPress includes those core account fields in its personal-data export and erasure tools. Member Portal stores site-wide access settings, an account page ID, and role capabilities, but it does not create a separate profile-data table or send profile data to an external service.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20the%20plugin%3F\"><h3>What happens when I delete the plugin?<\/h3><\/dt>\n<dd><p>Permanent deletion removes the Portal Member role, Member Portal settings, and plugin-owned capabilities. Users whose only role was Portal Member receive the site's default role so they are not left roleless. The Account page and standard WordPress user profile fields are preserved because they may contain administrator-authored content or user-owned data. Ordinary deactivation does not remove anything.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Add the WordPress.org View details link to the Plugins screen.<\/li>\n<li>Initial general release. Configurable access capability (defaults to universal <code>read<\/code> instead of a site-specific capability name), generic role\/capability naming, editable settings screen with autocomplete for protected paths\/post types\/capabilities.<\/li>\n<li>Require TSP Easy Dev through WordPress's native dependency header and path-independent runtime detection.<\/li>\n<li>Keep the account interface theme-independent and document use of WordPress core profile data.<\/li>\n<li>Internationalize and contextually escape the Member Portal administration interface.<\/li>\n<li>Clean up the Portal Member role, plugin-owned capabilities, and settings safely when the plugin is deleted.<\/li>\n<\/ul>","raw_excerpt":"Gate protected pages to logged-in members and give them a self-service account page.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/349083","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=349083"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sharrondenice"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=349083"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=349083"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=349083"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=349083"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=349083"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=349083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}