diff --git a/class-two-factor-core.php b/class-two-factor-core.php index 5eaa765a..56d6e4bc 100644 --- a/class-two-factor-core.php +++ b/class-two-factor-core.php @@ -1837,7 +1837,7 @@ public static function manage_users_custom_column( $output, $column_name, $user_ * @param WP_User $user WP_User object of the logged-in user. */ public static function user_two_factor_options( $user ) { - $notices = []; + $notices = array(); $providers = self::get_supported_providers_for_user( $user ); @@ -1901,13 +1901,46 @@ public static function user_two_factor_options( $user ) { do_action( 'show_user_security_settings', $user, $providers ); } + /** + * Get the recommended providers for a user. + * + * @param WP_User $user User instance. + * + * @return array List of provider keys. + */ + private static function get_recommended_providers( $user ) { + $providers = array( + 'Two_Factor_Totp', + 'Two_Factor_Backup_Codes', + ); + + /** + * Set the keys of the recommended (secure) methods. + * + * @param array $recommended_providers The recommended providers. + * @param WP_User $user The user. + */ + return (array) apply_filters( 'two_factor_recommended_providers', $providers, $user ); + } + + /** + * Render the user settings. + * + * @param WP_User $user User instance. + * @param array $providers List of available providers. + */ private static function render_user_providers_form( $user, $providers ) { - $primary_provider_key = self::get_primary_provider_key_selected_for_user( $user ); - $enabled_providers = self::get_enabled_providers_for_user( $user ); + $primary_provider_key = self::get_primary_provider_key_selected_for_user( $user ); + $enabled_providers = self::get_enabled_providers_for_user( $user ); + $recommended_provider_keys = self::get_recommended_providers( $user ); + + // Move the recommended providers first. + $recommended_providers = array_intersect_key( $providers, array_flip( $recommended_provider_keys ) ); + $providers = array_merge( $recommended_providers, $providers ); ?>

- +

@@ -1921,7 +1954,10 @@ private static function render_user_providers_form( $user, $providers ) { + +