From 299c8485c00c343c9063fef73207d93a370d778d Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Thu, 11 Aug 2022 21:49:08 +0000 Subject: [PATCH] Login and Registration: Introduce `is_login_screen()` function. This should help determine whether the current request is for the login screen. While it does not save a lot of lines of code, including this function in core aims to save developers some time that would otherwise be spent investigating the most reliable way to solve this problem. Implementation details: * By checking `wp_login_url()`, the function accounts for custom login locations set via the `login_url` filter. * By checking `$_SERVER['SCRIPT_NAME']` directly, instead of `did_action( 'login_form_login' )` or `$pagenow` global, the function can work as early as possible, for example in a must-use plugin. Follow-up to [2481], [6412], [12393], [12732], [15558], [15481], [15746]. Props dcowgill, scribu, donmhico, iandunn, wonderboymusic, nacin, robmiller, kitchin, chriscct7, tazotodua, davidbaumwald, SergeyBiryukov. Fixes #19898. git-svn-id: https://develop.svn.wordpress.org/trunk@53884 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/load.php | 13 +++++++++++++ tests/phpunit/tests/load/isLoginScreen.php | 21 +++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tests/phpunit/tests/load/isLoginScreen.php diff --git a/src/wp-includes/load.php b/src/wp-includes/load.php index 2682b81638..5a251af21e 100644 --- a/src/wp-includes/load.php +++ b/src/wp-includes/load.php @@ -1140,6 +1140,19 @@ function wp_clone( $object ) { return clone( $object ); } +/** + * Determines whether the current request is for the login screen. + * + * @since 6.1.0 + * + * @see wp_login_url() + * + * @return bool True if inside WordPress login screen, false otherwise. + */ +function is_login_screen() { + return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] ); +} + /** * Determines whether the current request is for an administrative interface page. * diff --git a/tests/phpunit/tests/load/isLoginScreen.php b/tests/phpunit/tests/load/isLoginScreen.php new file mode 100644 index 0000000000..d0cd1df9a6 --- /dev/null +++ b/tests/phpunit/tests/load/isLoginScreen.php @@ -0,0 +1,21 @@ +assertFalse( is_login_screen() ); + + $_SERVER['SCRIPT_NAME'] = '/wp-login.php'; + + $this->assertTrue( is_login_screen() ); + } +}