{"id":306810,"date":"2026-06-11T01:39:48","date_gmt":"2026-06-11T01:39:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/passkey-plus\/"},"modified":"2026-06-24T14:04:48","modified_gmt":"2026-06-24T14:04:48","slug":"advanced-passkey-login","status":"publish","type":"plugin","link":"https:\/\/de.wordpress.org\/plugins\/advanced-passkey-login\/","author":23490962,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.10","stable_tag":"1.1.10","tested":"7.0","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Advanced Passkeys for Secure Login","header_author":"wppasskey","header_description":"Advanced Passkeys for Secure Login enables passwordless passkey login for WordPress. Supports Face ID, Touch ID, Windows Hello, YubiKey, and more.","assets_banners_color":"534c72","last_updated":"2026-06-24 14:04:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/advanced-passkey-login\/","header_author_uri":"https:\/\/profiles.wordpress.org\/mbuiux\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":218,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.10":{"tag":"1.1.10","author":"wppasskey","date":"2026-06-24 14:04:48"},"1.1.5":{"tag":"1.1.5","author":"wppasskey","date":"2026-06-11 01:39:17"},"1.1.6":{"tag":"1.1.6","author":"wppasskey","date":"2026-06-11 18:14:52"},"1.1.7":{"tag":"1.1.7","author":"wppasskey","date":"2026-06-16 14:38:33"},"1.1.8":{"tag":"1.1.8","author":"wppasskey","date":"2026-06-18 23:24:17"},"1.1.9":{"tag":"1.1.9","author":"wppasskey","date":"2026-06-18 23:30:03"}},"upgrade_notice":{"1.1.10":"<p>Recommended update: improves conditional UI consistency, legacy authenticator mapping reliability, and registration error clarity.<\/p>","1.1.9":"<p>Recommended update: refines admin footer link\/rating styles for better settings-page visibility.<\/p>","1.1.8":"<p>Recommended update: fixes passkey revocation edge cases and improves authenticator brand detection\/reporting reliability.<\/p>","1.1.7":"<p>Recommended update: aligns plugin author metadata for WordPress.org listing consistency.<\/p>","1.1.6":"<p>Recommended update: ensures WordPress.org visual assets are included in automated deploys.<\/p>","1.1.5":"<p>Recommended update: strengthens sanitize\/validate\/escape protections and improves CI workflow safety checks.<\/p>","1.1.4":"<p>Recommended update: adds dashboard visibility, hardens request validation, and improves release packaging quality gates.<\/p>","1.1.2":"<p>Recommended update: adds integration module controls, Gutenberg block support, and shortcode UX improvements.<\/p>"},"ratings":[],"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":3568208,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3568208,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3568208,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"advanced-passkey-login\/login-button":{"name":"advanced-passkey-login\/login-button","title":"Passkey Login Button"},"advanced-passkey-login\/register-button":{"name":"advanced-passkey-login\/register-button","title":"Passkey Register Button"},"advanced-passkey-login\/passkey-profile":{"name":"advanced-passkey-login\/passkey-profile","title":"Account Passkeys"},"advanced-passkey-login\/setup-prompt":{"name":"advanced-passkey-login\/setup-prompt","title":"Passkey Setup Prompt"}},"tagged_versions":["1.1.10","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9"],"block_files":[],"assets_screenshots":{"screenshot-1.jpeg":{"filename":"screenshot-1.jpeg","revision":3568208,"resolution":"1","location":"assets","locale":"","width":2598,"height":2262},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3568208,"resolution":"2","location":"assets","locale":"","width":2616,"height":4346},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3568208,"resolution":"3","location":"assets","locale":"","width":2602,"height":3068},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3568208,"resolution":"4","location":"assets","locale":"","width":2614,"height":3286},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3569270,"resolution":"5","location":"assets","locale":"","width":2996,"height":1713},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3568208,"resolution":"6","location":"assets","locale":"","width":878,"height":1200},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3568208,"resolution":"7","location":"assets","locale":"","width":848,"height":1186}},"screenshots":{"1":"Dashboard tab with security activity metrics, authenticator overview, and last-login insights.","2":"Settings tab with everyday passkey controls, integration module toggles, and eligible role selection.","3":"Advanced tab showing technical configuration for login UX, RP settings, challenge timeouts, and rate limiting.","4":"Shortcodes tab with copy-ready shortcode cards, quick-start guidance, and integration snippets.","5":"User Profile passkey management panel for registering a new passkey and revoking existing credentials.","6":"Core WordPress login form with the \"Sign in with Passkey\" button below the standard password flow in the default black.","7":"Core WordPress login form with Last used passkey indicator pill for returning users in light gray."}},"plugin_section":[],"plugin_tags":[602,222353,9223,600,183349],"plugin_category":[38,54],"plugin_contributors":[266600,266599],"plugin_business_model":[],"class_list":["post-306810","plugin","type-plugin","status-publish","hentry","plugin_tags-login","plugin_tags-passkeys","plugin_tags-passwordless","plugin_tags-security","plugin_tags-webauthn","plugin_category-authentication","plugin_category-security-and-spam-protection","plugin_contributors-mbuiux","plugin_contributors-wppasskey","plugin_committers-wppasskey"],"banners":{"banner":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/banner-772x250.png?rev=3568208","banner_2x":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/banner-1544x500.png?rev=3568208","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/icon.svg?rev=3568208","icon":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/icon.svg?rev=3568208","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/screenshot-1.jpeg?rev=3568208","caption":"Dashboard tab with security activity metrics, authenticator overview, and last-login insights."},{"src":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/screenshot-2.png?rev=3568208","caption":"Settings tab with everyday passkey controls, integration module toggles, and eligible role selection."},{"src":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/screenshot-3.png?rev=3568208","caption":"Advanced tab showing technical configuration for login UX, RP settings, challenge timeouts, and rate limiting."},{"src":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/screenshot-4.png?rev=3568208","caption":"Shortcodes tab with copy-ready shortcode cards, quick-start guidance, and integration snippets."},{"src":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/screenshot-5.png?rev=3569270","caption":"User Profile passkey management panel for registering a new passkey and revoking existing credentials."},{"src":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/screenshot-6.png?rev=3568208","caption":"Core WordPress login form with the \"Sign in with Passkey\" button below the standard password flow in the default black."},{"src":"https:\/\/ps.w.org\/advanced-passkey-login\/assets\/screenshot-7.png?rev=3568208","caption":"Core WordPress login form with Last used passkey indicator pill for returning users in light gray."}],"raw_content":"<!--section=description-->\n<p>Passwords are the single biggest security risk for your WordPress site. They get leaked, reused, or broken by automated brute-force attacks. Standard Two-Factor Authentication (2FA) adds safety, but typing in temporary codes from SMS or authenticator apps introduces annoying friction to your daily workflow.<\/p>\n\n<p><strong>Advanced Passkeys for Secure Login<\/strong> brings the future of un-phishable, modern authentication directly to your WordPress site using the official FIDO2 \/ WebAuthn standard.<\/p>\n\n<p>Users register a passkey just once using their device's built-in biometric sensor (Face ID, Touch ID, Windows Hello) or a hardware security key (like a YubiKey). Future sign-ins take less than a second\u2014completely bypassing the traditional password field.<\/p>\n\n<h3>Why Switch to Passkeys?<\/h3>\n\n<ul>\n<li><strong>Immune to Phishing:<\/strong> Passkeys are cryptographically bound to your specific domain. A fake login page cannot trick or steal a passkey.<\/li>\n<li><strong>Goodbye Brute-Force:<\/strong> Because there is no static password on the server to guess, automated bot attacks are completely neutralized.<\/li>\n<li><strong>Ultimate Ecosystem Sync:<\/strong> Works seamlessly with iCloud Keychain, Google Password Manager, and 1Password for painless cross-device access.<\/li>\n<\/ul>\n\n<h3>Ecosystem-Wide Integrations Included<\/h3>\n\n<p>Unlike basic alternatives, this plugin features intelligent, dependency-aware integration modules that automatically inject passkey entry points into your favorite plugins. It features out-of-the-box support for <strong>WooCommerce, Easy Digital Downloads, MemberPress, Ultimate Member, LearnDash, BuddyBoss, Gravity Forms, and PMPro<\/strong>.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li><strong>One-Click Passwordless Auth:<\/strong> Adds a native \"Sign in with Passkey\" button directly to the WordPress login screen.<\/li>\n<li><strong>Conditional UI Autofill:<\/strong> Optional browser-native passkey autofill prompts on <code>wp-login.php<\/code> when username is focused.<\/li>\n<li><strong>Ecosystem Integrations:<\/strong> Built-in aware modules, blocks, and shortcodes for WooCommerce, MemberPress, LearnDash, BuddyBoss, and more.<\/li>\n<li><strong>Gutenberg Blocks &amp; Shortcodes:<\/strong> Automatically registers custom login cards and shortcodes based on active plugins.<\/li>\n<li><strong>Theme Template Overrides:<\/strong> Override the login button template via <code>\/advanced-passkeys\/login\/button.php<\/code> in your active theme.<\/li>\n<li><strong>Admin Dashboard Overview:<\/strong> Keep track of credential performance with an Authenticator Overview card and Last Login activity logs.<\/li>\n<li><strong>Granular Role Controls:<\/strong> Easily configure exactly which user roles are permitted to use passkey authentication (Default: Administrators).<\/li>\n<li><strong>Brute-Force Rate Limiting:<\/strong> Hardened local security with built-in login rate-limiting and automated daily log cleanups.<\/li>\n<li><strong>Multisite Compatible:<\/strong> Network-aware provisioning instantly configures security settings for newly created network sites.<\/li>\n<li><strong>Clean Performance &amp; Housekeeping:<\/strong> Lightweight footprint with a clean uninstall routine that leaves zero orphaned tables or options behind.<\/li>\n<\/ul>\n\n<h3>Developer Hooks: Last Used Pill<\/h3>\n\n<p>Developers can use these filters inside a theme or functionality plugin to globally customize or suppress the login form's Last used passkey indicator pill.<\/p>\n\n<h4>Available filters<\/h4>\n\n<ul>\n<li><code>advapafo_last_used_pill_freshness_days<\/code> \u2014 default 90 days<\/li>\n<li><code>advapafo_last_used_pill_visible<\/code> \u2014 final on\/off override<\/li>\n<li><code>advapafo_last_used_pill_label<\/code> \u2014 customize label text<\/li>\n<\/ul>\n\n<h4>Example implementation<\/h4>\n\n<pre><code>&lt;?php\n\/**\n * Example customization for Last used login pill.\n *\/\n\n\/\/ Show pill if passkey login is within 120 days.\nadd_filter( 'advapafo_last_used_pill_freshness_days', function ( $days, $user ) {\n    unset( $user );\n    return 120;\n}, 10, 2 );\n\n\/\/ Hide pill for administrator accounts.\nadd_filter( 'advapafo_last_used_pill_visible', function ( $visible, $timestamp, $freshness_days, $user ) {\n    unset( $timestamp, $freshness_days );\n\n    if ( $user instanceof WP_User &amp;&amp; in_array( 'administrator', (array) $user-&gt;roles, true ) ) {\n        return false;\n    }\n\n    return $visible;\n}, 10, 4 );\n\n\/\/ Label override.\nadd_filter( 'advapafo_last_used_pill_label', function ( $label, $user ) {\n    unset( $user );\n    return 'Previously used';\n}, 10, 2 );\n<\/code><\/pre>\n\n<!--section=installation-->\n<h4>Automatic installation<\/h4>\n\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins &gt; Add New<\/strong><\/li>\n<li>Search for <strong>Advanced Passkeys for Secure Login<\/strong><\/li>\n<li>Click <strong>Install Now<\/strong> then <strong>Activate<\/strong><\/li>\n<li>Go to <strong>Settings &gt; Advanced Passkeys for Secure Login<\/strong> and enable passkeys<\/li>\n<\/ol>\n\n<h4>Manual installation<\/h4>\n\n<ol>\n<li>Download the plugin ZIP from WordPress.org<\/li>\n<li>Go to <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong> and upload the ZIP<\/li>\n<li>Click <strong>Activate<\/strong><\/li>\n<li>Go to <strong>Settings &gt; Advanced Passkeys for Secure Login<\/strong> and enable passkeys<\/li>\n<\/ol>\n\n<h4>After activation<\/h4>\n\n<ol>\n<li>Go to <strong>Settings &gt; Advanced Passkeys for Secure Login<\/strong> \u2014 verify passkeys are enabled and select which roles may use them.<\/li>\n<li>Visit <strong>Users &gt; Your Profile<\/strong> and register your first passkey.<\/li>\n<li>Sign out and confirm the <strong>Sign in with Passkey<\/strong> button appears on the login page.<\/li>\n<li>Register a backup passkey on a second device to avoid lockout.<\/li>\n<\/ol>\n\n<h4>Production &amp; Local Environments<\/h4>\n\n<p>Passkeys require a secure (HTTPS) connection context. The plugin will actively block passkey flows over plain HTTP in production. \nIf you are testing locally without an SSL certificate, you can bypass this restriction by adding the following line to your <code>wp-config.php<\/code> file:<\/p>\n\n<pre><code>define( 'ADVAPAFO_ALLOW_HTTP', true ); (*Never use this in production!*)\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20passwords%20entirely%3F\"><h3>Does this replace passwords entirely?<\/h3><\/dt>\n<dd><p>No. Passkeys act as a seamless, high-security alternative sign-in method. Users retain their standard WordPress passwords as a reliable fallback.<\/p><\/dd>\n<dt id=\"which%20browsers%20and%20devices%20are%20supported%3F\"><h3>Which browsers and devices are supported?<\/h3><\/dt>\n<dd><p>Any browser supporting the WebAuthn standard (all major platforms since 2022) including Chrome, Safari, Firefox, and Edge. Supported hardware includes iPhones, iPads, Macs, Android devices, Windows Hello machines, and physical FIDO2\/U2F security keys like YubiKeys.<\/p><\/dd>\n<dt id=\"is%20https%20required%3F\"><h3>Is HTTPS required?<\/h3><\/dt>\n<dd><p>Yes, in production environments. The official WebAuthn specification mandates a secure context. See the local development instructions in the Installation tab to test locally via HTTP.<\/p><\/dd>\n<dt id=\"what%20php%20extensions%20do%20i%20need%3F\"><h3>What PHP extensions do I need?<\/h3><\/dt>\n<dd><p>The plugin relies on <code>openssl<\/code>, <code>mbstring<\/code>, and <code>json<\/code>. These core extensions are compiled by default on almost every modern managed WordPress host.<\/p><\/dd>\n<dt id=\"can%20i%20control%20which%20user%20roles%20can%20use%20passkeys%3F\"><h3>Can I control which user roles can use passkeys?<\/h3><\/dt>\n<dd><p>Yes. Navigate to <strong>Settings &gt; Advanced Passkeys for Secure Login &gt; Eligible Roles<\/strong>. While it defaults strictly to Administrators, you can provision passkeys for any core or custom role on your site.<\/p><\/dd>\n<dt id=\"which%20shortcodes%20are%20available%3F\"><h3>Which shortcodes are available?<\/h3><\/dt>\n<dd><p><strong>Core shortcodes:<\/strong>\n* <code>[advapafo_login_button]<\/code>\n* <code>[advapafo_register_button]<\/code>\n* <code>[advapafo_passkey_profile]<\/code>\n* <code>[advapafo_passkey_prompt]<\/code><\/p>\n\n<p><strong>Integration-specific shortcodes:<\/strong> (active when corresponding plugins are running)\n* <code>[advapafo_woocommerce_login]<\/code>\n* <code>[advapafo_edd_login]<\/code>\n* <code>[advapafo_memberpress_login]<\/code>\n* <code>[advapafo_ultimate_member_login]<\/code>\n* <code>[advapafo_learndash_login]<\/code>\n* <code>[advapafo_buddyboss_login]<\/code>\n* <code>[advapafo_gravityforms_login]<\/code>\n* <code>[advapafo_pmp_login]<\/code><\/p><\/dd>\n<dt id=\"which%20integration%20gutenberg%20blocks%20are%20available%3F\"><h3>Which integration Gutenberg blocks are available?<\/h3><\/dt>\n<dd><p>When an integration dependency is active, the plugin registers matching blocks:\n* <code>advanced-passkey-login\/woocommerce-login-card<\/code>\n* <code>advanced-passkey-login\/edd-login-card<\/code>\n* <code>advanced-passkey-login\/memberpress-login-card<\/code>\n* <code>advanced-passkey-login\/ultimate-member-login-card<\/code>\n* <code>advanced-passkey-login\/learndash-login-card<\/code>\n* <code>advanced-passkey-login\/buddyboss-login-card<\/code>\n* <code>advanced-passkey-login\/gravityforms-login-card<\/code>\n* <code>advanced-passkey-login\/pmp-login-card<\/code><\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20deactivate%20or%20delete%20the%20plugin%3F\"><h3>What happens if I deactivate or delete the plugin?<\/h3><\/dt>\n<dd><p>Deactivating keeps your data safe. Deleting (uninstalling) triggers a strict housekeeping routine that cleanly drops the <code>wp_wpk_credentials<\/code>, <code>wp_wpk_rate_limits<\/code>, and <code>wp_wpk_logs<\/code> tables alongside all <code>advapafo_*<\/code> options.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20multisite%20compatible%3F\"><h3>Is the plugin multisite compatible?<\/h3><\/dt>\n<dd><p>Yes. Database tables partition dynamically per site via <code>$wpdb-&gt;prefix<\/code>. Network activation auto-provisions existing sites and seamlessly configures any newly deployed network sites.<\/p><\/dd>\n<dt id=\"can%20i%20use%20a%20custom%20rp%20id%20for%20subdomain%20setups%3F\"><h3>Can I use a custom RP ID for subdomain setups?<\/h3><\/dt>\n<dd><p>Yes. Simply add <code>define( 'ADVAPAFO_RP_ID', 'example.com' );<\/code> directly into your site's <code>wp-config.php<\/code> file.<\/p><\/dd>\n<dt id=\"can%20i%20override%20the%20login%20button%20template%20in%20my%20theme%3F\"><h3>Can I override the login button template in my theme?<\/h3><\/dt>\n<dd><p>Yes. Copy the plugin template file to your active theme override directory:<\/p>\n\n<pre><code>\/wp-content\/themes\/your-child-theme\/advanced-passkeys\/login\/button.php\n<\/code><\/pre>\n\n<p>or in a parent theme:<\/p>\n\n<pre><code>\/wp-content\/themes\/your-parent-theme\/advanced-passkeys\/login\/button.php\n<\/code><\/pre>\n\n<p>Minimal override header example:<\/p>\n\n<pre><code>&lt;?php\n\/**\n * Advanced Passkeys template override: login button.\n * \/wp-content\/themes\/your-child-theme\/advanced-passkeys\/login\/button.php\n *\/\nif ( ! defined( 'ABSPATH' ) ) { exit; }\n<\/code><\/pre><\/dd>\n<dt id=\"what%20happens%20when%20conditional%20ui%20is%20enabled%3F\"><h3>What happens when Conditional UI is enabled?<\/h3><\/dt>\n<dd><p>When enabled in Settings &gt; Advanced:<\/p>\n\n<ul>\n<li>Browser-supported passkey autofill can appear on the username field.<\/li>\n<li>The manual \"Sign in with Passkey\" button is hidden on <code>wp-login.php<\/code>.<\/li>\n<li>The login OR separator is automatically disabled.<\/li>\n<li>Password fallback remains available.<\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.10<\/h4>\n\n<ul>\n<li>Fixed: conditional UI login elements now remain hidden consistently when conditional UI is enabled.<\/li>\n<li>Improved: authenticator provider reporting resolves legacy credential\/log payload variants more reliably.<\/li>\n<li>Improved: registration errors now show friendlier passkey guidance for browser invalid-state failures.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Improved: admin footer link styling and rating stars visibility for the settings screen.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Fixed: passkey revoke reliability across compatibility credential tables.<\/li>\n<li>Improved: authenticator provider normalization and typo tolerance for brand labeling.<\/li>\n<li>Improved: reporting metadata normalization for authenticator detection.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Improved: aligned plugin header author metadata with readme contributors.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Improved: include WordPress.org assets directory in release source so banners, icon, and screenshots deploy via SVN automation.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Improved: sanitize-early handling for transports and credential request inputs.<\/li>\n<li>Improved: stricter nonce-gated debug query handling in settings.<\/li>\n<li>Improved: output escaping hardening for integration-rendered markup and dynamic admin classes.<\/li>\n<li>Improved: release and quality workflow validation guardrails (actionlint gate).<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Added: Dashboard tab with an Authenticator Overview card.<\/li>\n<li>Added: Last Login activity card in the Dashboard tab.<\/li>\n<li>Improved: nonce and capability enforcement across sensitive request handlers.<\/li>\n<li>Improved: release packaging workflow with strict file allowlist validation.<\/li>\n<li>Fixed: release automation now publishes real GitHub releases with attached installable ZIP.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Added: integration manager for popular ecosystem plugins with dependency-aware module loading.<\/li>\n<li>Added: integration-specific shortcodes and Gutenberg blocks.<\/li>\n<li>Added: integration controls in settings with installed\/not installed indicators.<\/li>\n<li>Added: shortcode quick-start helper and improved shortcode documentation in admin UI.<\/li>\n<li>Changed: removed legacy shortcode alias registrations and related legacy copy.<\/li>\n<li>Changed: refreshed docs and translation template strings for current shortcode names.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Updated: plugin name and user-facing references to \"Advanced Passkeys for Secure Login\".<\/li>\n<li>Updated: settings\/UI copy to use the full plugin name.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: dismissible \"set up your passkey\" nudge notice for eligible users.<\/li>\n<li>Added: Passkeys column in the admin Users list showing count per user.<\/li>\n<li>Added: Scheduled daily cleanup of expired rate-limit rows and old log entries.<\/li>\n<li>Added: Challenge timeout setting in Settings &gt; Advanced Passkeys for Secure Login &gt; Advanced.<\/li>\n<li>Added: Login redirect URL field in settings (fallback after passkey login).<\/li>\n<li>Added: <code>[advapafo_login_button]<\/code> and <code>[advapafo_register_button]<\/code> shortcodes.<\/li>\n<li>Added: Log retention period setting (days).<\/li>\n<li>Improved: <code>get_challenge_ttl()<\/code> now reads from the settings UI.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Secure WordPress with passwordless passkey login using Face ID, Touch ID, Windows Hello, and hardware security keys.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/306810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=306810"}],"author":[{"embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wppasskey"}],"wp:attachment":[{"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=306810"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=306810"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=306810"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=306810"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=306810"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/de.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=306810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}