[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fAsV_SuMo80E4DPzQd_kZYOqybUpaqYMY0nILRTPpUKA":3,"$fdz6-MUXonxLRfoi9YlnQ8uNBALm1Adc6bIrDJIcVl8U":121,"$fYih4OwYSa1D7eB0aExUL08oEdl1FMn1D1vwYhWsMFRg":126},{"slug":4,"name":5,"version":6,"author":4,"author_profile":7,"description":8,"short_description":9,"active_installs":10,"downloaded":11,"rating":10,"num_ratings":10,"last_updated":12,"tested_up_to":13,"requires_at_least":14,"requires_php":15,"tags":16,"homepage":22,"download_link":23,"security_score":24,"vuln_count":10,"unpatched_count":10,"last_vuln_date":25,"fetched_at":26,"discovery_status":27,"vulnerabilities":28,"developer":29,"crawl_stats":25,"alternatives":34,"analysis":25,"fingerprints":25},"pageprotectpro","PageProtectPro","0.5.3","https:\u002F\u002Fprofiles.wordpress.org\u002Fpageprotectpro\u002F","\u003Cp>PageProtectPro is the simple way to protect WordPress pages and websites with password protection.\u003C\u002Fp>\n\u003Cp>Protect individual pages, your entire website, or private content areas without the complexity of a membership plugin. PageProtectPro is designed for website owners, agencies and administrators who want a clean, fast and professional way to restrict access to selected WordPress content.\u003C\u002Fp>\n\u003Ch4>Included Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Whole-site password protection\u003C\u002Fli>\n\u003Cli>Unlimited individual page and post protection\u003C\u002Fli>\n\u003Cli>Role-based bypass controls\u003C\u002Fli>\n\u003Cli>Lock-screen text customisation\u003C\u002Fli>\n\u003Cli>Lock-screen colour customisation\u003C\u002Fli>\n\u003Cli>Professional visitor-facing lock screen\u003C\u002Fli>\n\u003Cli>Protect Page quick action from the WordPress Pages list\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Common Uses\u003C\u002Fh4>\n\u003Cp>PageProtectPro is ideal for:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Websites under construction\u003C\u002Fli>\n\u003Cli>Client review websites\u003C\u002Fli>\n\u003Cli>Staff documents and internal resources\u003C\u002Fli>\n\u003Cli>Company policies, manuals and guides\u003C\u002Fli>\n\u003Cli>Private pages and restricted content\u003C\u002Fli>\n\u003Cli>Training materials\u003C\u002Fli>\n\u003Cli>Simple client portals\u003C\u002Fli>\n\u003Cli>Staging websites\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Why Choose PageProtectPro?\u003C\u002Fh4>\n\u003Cp>Many content protection plugins are built around complex membership systems. PageProtectPro focuses on one thing: simple, reliable password protection for WordPress pages and websites.\u003C\u002Fp>\n","The simple way to password protect WordPress pages, whole websites and private content.",0,103,"2026-07-12T19:39:00.000Z","7.0.2","6.0","7.4",[17,18,19,20,21],"content-protection","intranet","password-protect","private-pages","protected-pages","https:\u002F\u002Fpageprotectpro.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fpageprotectpro.0.5.3.zip",100,null,"2026-07-22T17:31:50.256Z","no_bundle",[],{"slug":4,"display_name":4,"profile_url":7,"plugin_count":30,"total_installs":10,"avg_security_score":24,"avg_patch_time_days":31,"trust_score":32,"computed_at":33},1,30,94,"2026-08-29T09:43:26.657Z",[35,55,75,92,107],{"slug":36,"name":37,"version":38,"author":39,"author_profile":40,"description":41,"short_description":42,"active_installs":43,"downloaded":44,"rating":10,"num_ratings":10,"last_updated":45,"tested_up_to":46,"requires_at_least":47,"requires_php":48,"tags":49,"homepage":48,"download_link":53,"security_score":54,"vuln_count":10,"unpatched_count":10,"last_vuln_date":25,"fetched_at":26},"contentprotector","ContentProtector – password protect your page, post or text","1.0","Anton","https:\u002F\u002Fprofiles.wordpress.org\u002Fantonphp\u002F","\u003Cp>\u003Cstrong>ContentProtector\u003C\u002Fstrong> is a lightweight and flexible plugin that allows you to protect your WordPress content with passwords. You can protect an entire post or page, or just a specific portion of the content.\u003C\u002Fp>\n\u003Ch3>Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Global Protection\u003C\u002Fstrong>: Set a global password for all posts or pages.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Partial Content Protection\u003C\u002Fstrong>: Use a shortcode to protect only a specific part of your content.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Customizable\u003C\u002Fstrong>: Easy to set up with a clean and intuitive admin interface.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Secure\u003C\u002Fstrong>: Uses WordPress Nonces and cookies for secure password handling.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>How It Works\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Use the shortcode \u003Ccode>[cpwp_protect password=\"your_password\"]\u003C\u002Fcode> to protect an entire post or page.\u003C\u002Fli>\n\u003Cli>Use \u003Ccode>[cpwp_protect_content password=\"your_password\"]\u003C\u002Fcode> to protect only a portion of your content.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Example for partial content protection:\u003Cbr \u002F>\n    `html\u003Cbr \u002F>\n[cpwp_protect_content password=”pass”]\u003Cbr \u002F>\nThis content is protected by a password. Enter the password to view it.\u003Cbr \u002F>\n[\u002Fcpwp_protect_content]\u003C\u002Fp>\n","Protect your content with passwords using easy-to-use shortcodes. Supports both global protection and partial content protection.",2000,3036,"2025-01-07T20:08:00.000Z","6.7.5","5.8","",[17,50,19,51,52],"password","protection","restrict-content","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fcontentprotector.1.0.zip",92,{"slug":56,"name":57,"version":58,"author":59,"author_profile":60,"description":61,"short_description":62,"active_installs":63,"downloaded":64,"rating":24,"num_ratings":65,"last_updated":66,"tested_up_to":67,"requires_at_least":68,"requires_php":48,"tags":69,"homepage":72,"download_link":73,"security_score":74,"vuln_count":10,"unpatched_count":10,"last_vuln_date":25,"fetched_at":26},"expire-password-protected-pages","Expire Password Protected Pages","0.1.0","TG","https:\u002F\u002Fprofiles.wordpress.org\u002Ftroyglancy\u002F","\u003Cp>Description: This plugin will require visitors to type in the password each time they are visiting a password protected page. This also will prevent the page from being accessible if someone types in the password on a public computer. By default WordPress password protected pages sessions will last 10 days. Originally came up with this idea when a client did not want a password protected pages accessible after the browser was closed. While you could add the code to your function.php within your theme I did not want the code to get overwritten when doing a theme update. Using this plugin avoids the need for updating the function.php file.\u003C\u002Fp>\n\u003Cp>Once you have it uploaded to your WordPress install. Simply login to your WordPress backend and activate the plugin. After it’s activated you no longer need to do anything. You can test the page by refreshing the page after typing the password or closing your browser. Once you visit the page again it will force you to type in the password.\u003C\u002Fp>\n\u003Cp>Please note: If you use a cache plugin it may cause the plugin to not work correctly. Please whitelist the page you’re password protecting within your cache plugin.\u003C\u002Fp>\n\u003Cp>You can use this plugin by downloading and unzippping it to the \u002Fplugin directory. Once you have it uploaded to your web host login to your WordPress backend and activate the plugin. After it’s activated you no longer need to do anything.\u003C\u002Fp>\n","Description: This plugin will require visitors to type in the password each time they are visiting a password protected page.",200,3695,3,"2018-05-22T03:44:00.000Z","4.9.29","3.7",[70,71],"password-protected-pages","security","https:\u002F\u002Fgithub.com\u002Ftroyglancy\u002FExpire-Password-Protected-Pages","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fexpire-password-protected-pages.zip",85,{"slug":76,"name":77,"version":78,"author":79,"author_profile":80,"description":81,"short_description":82,"active_installs":10,"downloaded":83,"rating":10,"num_ratings":10,"last_updated":84,"tested_up_to":13,"requires_at_least":14,"requires_php":15,"tags":85,"homepage":90,"download_link":91,"security_score":24,"vuln_count":10,"unpatched_count":10,"last_vuln_date":25,"fetched_at":26},"better-protected-password-pages","Better Protected Password Pages","0.1.29","niallolaoghaire","https:\u002F\u002Fprofiles.wordpress.org\u002Fniallolaoghaire\u002F","\u003Cp>Better Protected Password Pages is a lightweight plugin for improving WordPress’s built-in password-protected posts and pages.\u003C\u002Fp>\n\u003Cp>The plugin keeps the native WordPress password protection workflow, then adds simple controls for the visitor-facing password form.\u003C\u002Fp>\n\u003Cp>Features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Remove the default “Protected:” prefix from protected content titles.\u003C\u002Fli>\n\u003Cli>Customize the password form intro text.\u003C\u002Fli>\n\u003Cli>Customize the submit button label.\u003C\u002Fli>\n\u003Cli>Customize the failed password message.\u003C\u002Fli>\n\u003Cli>Add an optional password field placeholder.\u003C\u002Fli>\n\u003Cli>Set the protected content password cookie duration.\u003C\u002Fli>\n\u003Cli>Add an optional logo\u002Fimage above the password form.\u003C\u002Fli>\n\u003Cli>Set optional button and form background colours.\u003C\u002Fli>\n\u003Cli>Add optional custom CSS classes to the password form wrapper.\u003C\u002Fli>\n\u003Cli>Enable lightweight default styling for password forms.\u003C\u002Fli>\n\u003Cli>Add per-page\u002Fpost overrides for password-protected content.\u003C\u002Fli>\n\u003Cli>Reset settings to defaults.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Better Protected Password Pages is intentionally small. It does not replace WordPress roles, membership plugins, or access-control systems.\u003C\u002Fp>\n","Improve the default WordPress password-protected content experience with global settings and per-content overrides.",102,"2026-06-15T09:10:00.000Z",[86,87,88,21,89],"password-form","password-protected","privacy","protected-posts","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fbetter-protected-pages\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fbetter-protected-password-pages.0.1.29.zip",{"slug":93,"name":94,"version":95,"author":96,"author_profile":97,"description":98,"short_description":99,"active_installs":10,"downloaded":100,"rating":24,"num_ratings":30,"last_updated":101,"tested_up_to":13,"requires_at_least":14,"requires_php":15,"tags":102,"homepage":48,"download_link":106,"security_score":24,"vuln_count":10,"unpatched_count":10,"last_vuln_date":25,"fetched_at":26},"lockaire","Lockaire","1.0.0","kulwindersingh5555","https:\u002F\u002Fprofiles.wordpress.org\u002Fkulwindersingh5555\u002F","\u003Cp>Lockaire lets you design a fully custom password-protected page in WordPress. Unlike other password protection plugins that use WordPress’s default plain password form, Lockaire gives you complete control — build your own layout, content, and branding using the shortcode on any page or post you create.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Protect specific pages and posts\u003C\u002Fli>\n\u003Cli>Redirect visitors to your custom password page\u003C\u002Fli>\n\u003Cli>AJAX-powered password validation\u003C\u002Fli>\n\u003Cli>Redirect users back to protected content after authentication\u003C\u002Fli>\n\u003Cli>Separate access control for pages and posts\u003C\u002Fli>\n\u003Cli>Password visibility toggle\u003C\u002Fli>\n\u003Cli>WordPress nonce security protection\u003C\u002Fli>\n\u003C\u002Ful>\n","Build a fully custom password-protected page from scratch — your own layout and design instead of WordPress's default plain password form.",95,"2026-07-12T14:39:00.000Z",[50,70,103,104,105],"password-protection","protect-page","protect-post","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flockaire.zip",{"slug":108,"name":109,"version":110,"author":111,"author_profile":112,"description":113,"short_description":114,"active_installs":10,"downloaded":115,"rating":10,"num_ratings":10,"last_updated":116,"tested_up_to":13,"requires_at_least":117,"requires_php":15,"tags":118,"homepage":48,"download_link":120,"security_score":24,"vuln_count":10,"unpatched_count":10,"last_vuln_date":25,"fetched_at":26},"riaco-content-protector","RIACO Content Protector","1.1.0","robertoiacono","https:\u002F\u002Fprofiles.wordpress.org\u002Fprototipo88\u002F","\u003Cp>\u003Cstrong>RIACO Content Protector\u003C\u002Fstrong> allows you to protect \u003Cem>any part\u003C\u002Fem> of your WordPress content using a shortcode.\u003Cbr \u002F>\nUnlike the built-in post password protection, this plugin protects only what you wrap, \u003Cem>not the whole post\u003C\u002Fem>.\u003C\u002Fp>\n\u003Cp>Perfect for:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Protecting premium blocks of content  \u003C\u002Fli>\n\u003Cli>Protecting guides, downloads, links, or sensitive sections   \u003C\u002Fli>\n\u003Cli>Paywall-style snippets\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Protect \u003Cstrong>only specific content\u003C\u002Fstrong> inside posts\u002Fpages\u003C\u002Fli>\n\u003Cli>Uses a minimal shortcode:\u003Cbr \u002F>\n  [riaco_content_protector] Hidden text here [\u002Friaco_content_protector]\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Global password\u003C\u002Fstrong> stored in plain text, like WordPress page passwords.\u003C\u002Fli>\n\u003Cli>AJAX-based form — no page reload\u003C\u002Fli>\n\u003Cli>Unlocks \u003Cstrong>all protected sections\u003C\u002Fstrong> on the site after correct password\u003C\u002Fli>\n\u003Cli>Optional cookie persistence (remember unlocked content for a configurable number of days)\u003C\u002Fli>\n\u003Cli>Secure implementation using nonces, hashed tokens, and transients\u003C\u002Fli>\n\u003Cli>Developer-friendly: filters, actions, and JS custom events at every key point in the unlock flow\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Important:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The global password is stored in plain text, just like WordPress page passwords. It can be read by user with ‘manage_options’ ability.\u003C\u002Fli>\n\u003Cli>If the global password or “Remember Unlocked” duration is changed in settings, all existing unlock cookies are invalidated. Users will need to re-enter the new password to access protected content.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>How It Works\u003C\u002Fh3>\n\u003Cp>Wrap content you want to protect:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[riaco_content_protector]\nThis text will be hidden until the visitor enters the password.\n[\u002Friaco_content_protector]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Set the global password under:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Settings > Content Protector\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Visitors will see a modern, styled form.\u003Cbr \u002F>\nAfter entering the correct password:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The content unlocks immediately  \u003C\u002Fli>\n\u003Cli>All other protected areas unlock automatically  \u003C\u002Fli>\n\u003Cli>An optional cookie can keep everything unlocked for a chosen number of days  \u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Security\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Nonces on every request  \u003C\u002Fli>\n\u003Cli>Secure HMAC token for cookie authentication  \u003C\u002Fli>\n\u003Cli>Sanitized shortcode attributes  \u003C\u002Fli>\n\u003Cli>Escaped output  \u003C\u002Fli>\n\u003Cli>No sensitive data stored in cookies  \u003C\u002Fli>\n\u003Cli>Global password stored in plain text, like WordPress page passwords. \u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Cookie\u003C\u002Fh3>\n\u003Cp>The default cookie name is \u003Ccode>riaco_cp_unlocked_global\u003C\u002Fcode>. The scope suffix \u003Ccode>global\u003C\u002Fcode> can be changed via the \u003Ccode>riaco_cp_cookie_scope\u003C\u002Fcode> filter, which also changes the cookie name accordingly.\u003C\u002Fp>\n\u003Ch3>Style\u003C\u002Fh3>\n\u003Cp>You can style the content protector box.\u003C\u002Fp>\n\u003Cp>It has this class: \u003Ccode>.riaco-cp--container\u003C\u002Fcode>, so you can add in your \u003Ccode>style.css\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>.riaco-cp--container {\n    background: #f8f9fa;\n    padding: 20px;\n    border: 1px solid #ddd;\n    border-radius: 6px;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You can replace button classes using:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'riaco_cp_button_classes', function( $classes ) {\n    return 'button my-custom-button-class';\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Or you can remove button classes:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter( 'riaco_cp_button_classes', function( $classes ) {\n    return str_replace( 'wp-element-button', '', $classes );\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>For Developers\u003C\u002Fh3>\n\u003Cp>The plugin exposes actions and filters at every key point so you can extend or customise behaviour without modifying plugin files.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Filters\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>riaco_cp_default_options — modify the option defaults written on first activation.\n\n\nadd_filter( 'riaco_cp_default_options', function( $defaults ) {\n    $defaults['remember_days'] = 30;\n    return $defaults;\n});\n\n\nriaco_cp_instance_id — override the computed instance ID for a protected block.\n\n\nadd_filter( 'riaco_cp_instance_id', function( $id, $atts, $content ) {\n    return ! empty( $atts['id'] ) ? 'my_prefix_' . $atts['id'] : $id;\n}, 10, 3 );\n\n\nriaco_cp_transient_expiry — change how long protected content is cached (default: `DAY_IN_SECONDS`).\n\n\nadd_filter( 'riaco_cp_transient_expiry', function( $seconds, $instance_id ) {\n    return HOUR_IN_SECONDS * 6;\n}, 10, 2 );\n\n\nriaco_cp_lock_message — customise the message shown above the password field.\n\n\nadd_filter( 'riaco_cp_lock_message', function( $message, $instance_id ) {\n    return __( 'Members only. Enter your access code:', 'my-theme' );\n}, 10, 2 );\n\n\nriaco_cp_unlocked_content — wrap or replace the HTML around unlocked content.\n\n\nadd_filter( 'riaco_cp_unlocked_content', function( $html, $content, $instance_id ) {\n    return '\u003Cdiv class=\"my-unlocked-wrapper\">' . $content . '\u003C\u002Fdiv>';\n}, 10, 3 );\n\n\nriaco_cp_cookie_args — modify the options passed to `setcookie()`.\n\n\nadd_filter( 'riaco_cp_cookie_args', function( $args, $cookie_name ) {\n    $args['samesite'] = 'Strict';\n    return $args;\n}, 10, 2 );\n\n\nriaco_cp_max_attempts — change the brute-force rate-limit threshold (default: 5).\n\n\nadd_filter( 'riaco_cp_max_attempts', function( $max ) {\n    return 10;\n});\n\n\nriaco_cp_rate_limit_window — change the rate-limit window in seconds (default: 15 minutes).\n\n\nadd_filter( 'riaco_cp_rate_limit_window', function( $seconds ) {\n    return 5 * MINUTE_IN_SECONDS;\n});\n\n\nriaco_cp_content_access — override the cookie check before protected content is rendered. Return `null` to use the default cookie check, `true` to force-grant access, or `false` to force the lock form.\n\n\nadd_filter( 'riaco_cp_content_access', function( $access, $instance_id, $atts ) {\n    \u002F\u002F Grant access to logged-in users automatically.\n    if ( is_user_logged_in() ) {\n        return true;\n    }\n    return null; \u002F\u002F Fall through to cookie check for guests.\n}, 10, 3 );\n\n\nriaco_cp_locked_html — replace or wrap the entire locked form HTML.\n\n\nadd_filter( 'riaco_cp_locked_html', function( $html, $instance_id, $atts ) {\n    return '\u003Cdiv class=\"my-paywall\">Subscribe to see this content.\u003C\u002Fdiv>';\n}, 10, 3 );\n\n\nriaco_cp_validate_password — override password validation. Return `null` to use the default `hash_equals` check, `true` to grant access, or `false` to deny. When non-null, the global password is not consulted.\n\n\nadd_filter( 'riaco_cp_validate_password', function( $result, $user_pass, $instance_id ) {\n    \u002F\u002F Accept a secondary password for a specific block.\n    if ( $instance_id === 'riaco_cp_vip' && $user_pass === 'vip-secret' ) {\n        return true;\n    }\n    return null; \u002F\u002F Defer to global password check.\n}, 10, 3 );\n\n\nriaco_cp_rate_limit_bypass — bypass the brute-force counter for trusted IP addresses.\n\n\nadd_filter( 'riaco_cp_rate_limit_bypass', function( $bypass, $ip_address ) {\n    $trusted = array( '127.0.0.1', '192.168.1.100' );\n    return in_array( $ip_address, $trusted, true );\n}, 10, 2 );\n\n\nriaco_cp_cookie_scope — change the cookie scope suffix (default: `'global'`). The cookie name becomes `riaco_cp_unlocked_{scope}`. Use this to implement per-post or per-instance independent lock states.\n\n\nadd_filter( 'riaco_cp_cookie_scope', function( $scope, $instance_id ) {\n    \u002F\u002F Use a per-post cookie so each post unlocks independently.\n    return 'post_' . get_the_ID();\n}, 10, 2 );\n\n\nriaco_cp_ajax_response — inject additional fields into the JSON success response sent after unlock.\n\n\nadd_filter( 'riaco_cp_ajax_response', function( $data, $instance_id ) {\n    $data['redirect'] = home_url( '\u002Fmembers\u002F' );\n    return $data;\n}, 10, 2 );\n\n\nriaco_cp_js_data — add extra data to the `RIACO_CP_Ajax` JavaScript object.\n\n\nadd_filter( 'riaco_cp_js_data', function( $data ) {\n    $data['my_feature_enabled'] = true;\n    return $data;\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Actions\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>riaco_cp_loaded — fires after the plugin initialises; receives the `Plugin` instance.\n\n\nadd_action( 'riaco_cp_loaded', function( $plugin ) {\n    \u002F\u002F $plugin->settings, $plugin->shortcode, etc. are available here.\n});\n\n\nriaco_cp_form_fields — inject extra hidden inputs or markup inside the password form.\n\n\nadd_action( 'riaco_cp_form_fields', function( $instance_id ) {\n    echo '\u003Cinput type=\"hidden\" name=\"my_field\" value=\"' . esc_attr( $instance_id ) . '\">';\n});\n\n\nriaco_cp_password_correct — fires when a visitor enters the correct password.\n\n\nadd_action( 'riaco_cp_password_correct', function( $instance_id ) {\n    \u002F\u002F Log unlock event, fire analytics, etc.\n});\n\n\nriaco_cp_password_incorrect — fires on a failed attempt; `$attempts` is the running total for this IP.\n\n\nadd_action( 'riaco_cp_password_incorrect', function( $instance_id, $attempts ) {\n    if ( $attempts >= 3 ) {\n        \u002F\u002F Send alert, block IP in your firewall, etc.\n    }\n}, 10, 2 );\n\n\nriaco_cp_cookie_set — fires after the unlock cookie is written.\n\n\nadd_action( 'riaco_cp_cookie_set', function( $cookie_name, $expire ) {\n    \u002F\u002F Record unlock timestamp, sync to a log, etc.\n}, 10, 2 );\n\n\nriaco_cp_settings_page_after — fires after the free plugin's settings form. Use it to render your own `\u003Cform>` block with additional settings fields below the existing form.\n\n\nadd_action( 'riaco_cp_settings_page_after', function() {\n    \u002F\u002F Render a separate settings form here.\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>JavaScript Custom Events\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>The plugin triggers jQuery custom events on the \u003Ccode>.riaco-cp--container\u003C\u002Fcode> element at key moments. Listen from any JavaScript file that loads after the plugin’s script.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>riaco_cp:before_submit — fires just before the AJAX password call. Call `e.preventDefault()` to cancel the submission (the UI is restored automatically).\n\n\n$(document).on('riaco_cp:before_submit', '.riaco-cp--container', function(e, instanceId, password) {\n    \u002F\u002F e.preventDefault(); \u002F\u002F uncomment to cancel submission\n});\n\n\nriaco_cp:unlock_success — fires after a successful AJAX response, before the container is replaced with unlocked content.\n\n\n$(document).on('riaco_cp:unlock_success', '.riaco-cp--container', function(e, instanceId, responseData) {\n    console.log('Unlocked:', instanceId, responseData);\n});\n\n\nriaco_cp:unlock_error — fires on wrong password, rate-limit hit, or network\u002Fserver failure.\n\n\n$(document).on('riaco_cp:unlock_error', '.riaco-cp--container', function(e, instanceId, errorMessage) {\n    console.warn('Unlock failed for', instanceId, errorMessage);\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This plugin is licensed under GPLv2 or later.\u003C\u002Fp>\n","Protect any portion of your WordPress content using a simple shortcode. Includes global password, AJAX unlock, and site-wide instant access.",324,"2026-06-12T07:26:00.000Z","6.2",[17,119,50,103,52],"hide-content","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Friaco-content-protector.1.1.0.zip",{"error":122,"url":123,"statusCode":124,"statusMessage":125,"message":125},true,"http:\u002F\u002Flocalhost\u002Fapi\u002Fplugins\u002Fpageprotectpro\u002Fbundle",404,"no bundle for this plugin yet",{"slug":4,"current_version":6,"total_versions":30,"versions":127},[128],{"version":6,"download_url":23,"svn_tag_url":129,"released_at":25,"has_diff":130,"diff_files_changed":131,"diff_lines":25,"trac_diff_url":25,"vulnerabilities":132,"is_current":122},"https:\u002F\u002Fplugins.svn.wordpress.org\u002Fpageprotectpro\u002Ftags\u002F0.5.3\u002F",false,[],[]]