',
+ '%2$s',
esc_url( self::login_url( $backup_link_args ) ),
esc_html( $backup_provider->get_alternative_provider_label() )
);
@@ -834,14 +834,14 @@ public static function login_html( $user, $login_nonce, $redirect_to, $error_msg
}
/**
- * Filters the backup links displayed on the two-factor login form.
+ * Filters the html links displayed on the two-factor login form.
*
* Plugins can use this filter to modify or add links to the two-factor authentication
- * login form, allowing users to select backup methods for authentication.
+ * login form, allowing users to select backup methods for authentication or provide documentation links.
*
* @since 0.9.2
*
- * @param array $links An array of backup links displayed on the two-factor login form.
+ * @param array $links An array of links displayed on the two-factor login form.
*/
$links = apply_filters( 'two_factor_login_backup_links', $links );
?>
@@ -854,7 +854,7 @@ public static function login_html( $user, $login_nonce, $redirect_to, $error_msg
' . $link . '';
}
?>
diff --git a/readme.txt b/readme.txt
index f4baaffa2..596405ccf 100644
--- a/readme.txt
+++ b/readme.txt
@@ -28,6 +28,7 @@ Here is a list of action and filter hooks provided by the plugin:
- `two_factor_enabled_providers_for_user` filter overrides the list of two-factor providers enabled for a user. First argument is an array of enabled provider classnames as values, the second argument is the user ID.
- `two_factor_user_authenticated` action which receives the logged in `WP_User` object as the first argument for determining the logged in user right after the authentication workflow.
- `two_factor_token_ttl` filter overrides the time interval in seconds that an email token is considered after generation. Accepts the time in seconds as the first argument and the ID of the `WP_User` object being authenticated.
+- `two_factor_login_backup_links` filters the backup links displayed on the two-factor login form.
== Frequently Asked Questions ==
From 98f3571708de0bfd6d9cffc9a48a761ba759a82e Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 00:41:48 +0100
Subject: [PATCH 007/151] add abspath
---
class-two-factor-compat.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/class-two-factor-compat.php b/class-two-factor-compat.php
index d7b4f46a3..8cfafd8c1 100644
--- a/class-two-factor-compat.php
+++ b/class-two-factor-compat.php
@@ -5,6 +5,10 @@
* @package Two_Factor
*/
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
/**
* A compatibility layer for some of the most popular plugins.
*
From 4ae9f1f29da0ded416a20ec95bbd78b23e708b10 Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 00:45:50 +0100
Subject: [PATCH 008/151] add abspath to two-factor.php
---
two-factor.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/two-factor.php b/two-factor.php
index 96ce6c99b..a48264ec0 100644
--- a/two-factor.php
+++ b/two-factor.php
@@ -22,6 +22,10 @@
* Network: True
*/
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
/**
* Shortcut constant to the path of this file.
*/
From 198f9b9c71cc5c14c60d462b54bd7cd31684b0ba Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 00:47:18 +0100
Subject: [PATCH 009/151] add abspath to class-two-factor-fido-u2f.php
---
providers/class-two-factor-fido-u2f.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/providers/class-two-factor-fido-u2f.php b/providers/class-two-factor-fido-u2f.php
index c6b6d0473..89c6c5ccf 100644
--- a/providers/class-two-factor-fido-u2f.php
+++ b/providers/class-two-factor-fido-u2f.php
@@ -5,6 +5,10 @@
* @package Two_Factor
*/
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
/**
* Class for creating a FIDO Universal 2nd Factor provider.
*
From c7e7a078028c27552e9fb154965d89ee2bb73530 Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 00:48:34 +0100
Subject: [PATCH 010/151] add abspath to class-two-factor-fido-u2f-admin.php
---
providers/class-two-factor-fido-u2f-admin.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/providers/class-two-factor-fido-u2f-admin.php b/providers/class-two-factor-fido-u2f-admin.php
index 8bc9af83e..3a2e6370f 100644
--- a/providers/class-two-factor-fido-u2f-admin.php
+++ b/providers/class-two-factor-fido-u2f-admin.php
@@ -5,6 +5,10 @@
* @package Two_Factor
*/
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
/**
* Class for registering & modifying FIDO U2F security keys.
*
From f0e9baf0b2a4442194d4cacecf9599f5214876c7 Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 00:49:16 +0100
Subject: [PATCH 011/151] add abspath to class-two-factor-dummy.php
---
providers/class-two-factor-dummy.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/providers/class-two-factor-dummy.php b/providers/class-two-factor-dummy.php
index 55005bca2..0eb68530e 100644
--- a/providers/class-two-factor-dummy.php
+++ b/providers/class-two-factor-dummy.php
@@ -5,6 +5,10 @@
* @package Two_Factor
*/
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
/**
* Class for creating a dummy provider.
*
From ae8f5788b4d133cb8b46cd5096b3be1d0c67d803 Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 00:50:09 +0100
Subject: [PATCH 012/151] add abspath to class-two-factor-totp.php
---
providers/class-two-factor-totp.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/providers/class-two-factor-totp.php b/providers/class-two-factor-totp.php
index b5286fdc8..340ded1ae 100644
--- a/providers/class-two-factor-totp.php
+++ b/providers/class-two-factor-totp.php
@@ -5,6 +5,10 @@
* @package Two_Factor
*/
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
/**
* Class Two_Factor_Totp
*/
From 4e504ecd6a8e54a91697b7599adf8c3476580450 Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 00:50:51 +0100
Subject: [PATCH 013/151] add abspath to class-two-factor-backup-codes.php
---
providers/class-two-factor-backup-codes.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/providers/class-two-factor-backup-codes.php b/providers/class-two-factor-backup-codes.php
index 1901799ce..b8e6026eb 100644
--- a/providers/class-two-factor-backup-codes.php
+++ b/providers/class-two-factor-backup-codes.php
@@ -5,6 +5,10 @@
* @package Two_Factor
*/
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
/**
* Class for creating a backup codes provider.
*
From 6ce476134ffe5b4c5058e7f72e16befb642f3414 Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 00:51:14 +0100
Subject: [PATCH 014/151] add abspath to class-two-factor-email.php
---
providers/class-two-factor-email.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/providers/class-two-factor-email.php b/providers/class-two-factor-email.php
index 79217b36b..1d380aef9 100644
--- a/providers/class-two-factor-email.php
+++ b/providers/class-two-factor-email.php
@@ -5,6 +5,10 @@
* @package Two_Factor
*/
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
/**
* Class for creating an email provider.
*
From a819e3a64bddf8cd5c761b0e733be3136335abe9 Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 00:52:06 +0100
Subject: [PATCH 015/151] add abspath to class-two-factor-core.php
---
class-two-factor-core.php | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/class-two-factor-core.php b/class-two-factor-core.php
index 8086c4347..ccd1ff007 100644
--- a/class-two-factor-core.php
+++ b/class-two-factor-core.php
@@ -5,6 +5,10 @@
* @package Two_Factor
*/
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
/**
* Class for creating two factor authorization.
*
From dc8b9d84bee6a116e4738f9588fde6caa6297d8b Mon Sep 17 00:00:00 2001
From: Brian
Date: Sat, 31 Jan 2026 11:56:23 +0100
Subject: [PATCH 016/151] Clarify TOTP setup instructions - draft
---
providers/class-two-factor-totp.php | 34 +++++++++++++++++++++++------
1 file changed, 27 insertions(+), 7 deletions(-)
diff --git a/providers/class-two-factor-totp.php b/providers/class-two-factor-totp.php
index b5286fdc8..63d77918b 100644
--- a/providers/class-two-factor-totp.php
+++ b/providers/class-two-factor-totp.php
@@ -289,8 +289,19 @@ public function user_two_factor_options( $user ) {
?>