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
This commit is contained in:
Sergey Biryukov
2022-08-11 21:49:08 +00:00
parent 40c19e45bf
commit 299c8485c0
2 changed files with 34 additions and 0 deletions

View File

@@ -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.
*

View File

@@ -0,0 +1,21 @@
<?php
/**
* Tests for is_login_screen().
*
* @group load.php
* @covers ::is_login_screen
*/
class Tests_Load_IsLoginScreen extends WP_UnitTestCase {
/**
* @ticket 19898
*/
public function test_is_login_screen() {
$this->assertFalse( is_login_screen() );
$_SERVER['SCRIPT_NAME'] = '/wp-login.php';
$this->assertTrue( is_login_screen() );
}
}