Answers:
使用global $pagenow
,这是WordPress在运行时设置的通用全局设置:
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
您还可以检查登录页面的类型,例如注册:
if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
// We're registering
}
以下代码被认为是旧代码,不应该使用(wp-register.php
不推荐使用,不久后删除):
if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
run_my_funky_plugin();
if( is_wplogin() ){
...
}
码:
function is_wplogin(){
$ABSPATH_MY = str_replace(array('\\','/'), DIRECTORY_SEPARATOR, ABSPATH);
return ((in_array($ABSPATH_MY.'wp-login.php', get_included_files()) || in_array($ABSPATH_MY.'wp-register.php', get_included_files()) ) || (isset($_GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'wp-login.php') || $_SERVER['PHP_SELF']== '/wp-login.php');
}
1)有时,如果您尝试使用REQUEST_URI
(或SCRIPT_PATH
)检查登录页面,则会得到错误的值,因为许多插件会更改LOGIN和ADMIN网址。
2)$pagenow
在这种情况下也会给您不正确的价值!
get_included_files()
似乎是最准确的解决方案(至少对我而言)。
更现代的方法是,即使插件更改了wp-login URL,并且WP位于子文件夹中等,它也应该起作用:
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
。这对我来说有点干净。
我已经使用WordPress自己的wp_login_url()方法实现了它,如下所示:
public static function is_wp_login() {
$login_path = rtrim( strtolower( parse_url( wp_login_url( '', true ), PHP_URL_PATH ) ), '/' );
return ( rtrim( strtolower( $_SERVER[ 'REQUEST_URI' ] ), '/' ) == $login_path );
}
仅比较两个路径(因为很难绝对确定使用SSL可能会终止它)就足够了……但这确实意味着,更改默认登录表单的插件或主题开发人员必须已经完成所以正确的方法...
我只对注册页面感兴趣,对登录页面不感兴趣。因此,这可能不是每个人都想要的。
$ GLOBALS ['pagenow']为我返回index.php。也许是因为buddypress或我的主题。
所以我用
is_page('register')
如果您检查注册页面的正文,它也具有ID,因此,如果显示为page-id-4906,则可以更好地使用它:
is_page('4906')
当前的答案都没有对我有用。
我所做的是检查$_GET
数组是否具有“页面”键,以及其值是否为“登录”。
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
这里提出的一些解决方案可行,因此我提供了在普通的WordPress网站(未在Multisite上测试)上运行的非常简单的工具。
简单如:
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
它考虑了url参数?action=register
,该参数仅在您位于注册页面时才存在。
这是@ T.Todua答案的PSR-2版本。我只是很好地格式化了。这更好地操纵了该功能,例如添加用于测试目的的过滤器等:
function isLoginPage()
{
$is_login_page = false;
$ABSPATH_MY = str_replace(array('\\', '/'), DIRECTORY_SEPARATOR, ABSPATH);
// Was wp-login.php or wp-register.php included during this execution?
if (
in_array($ABSPATH_MY . 'wp-login.php', get_included_files()) ||
in_array($ABSPATH_MY . 'wp-register.php', get_included_files())
) {
$is_login_page = true;
}
// $GLOBALS['pagenow'] is equal to "wp-login.php"?
if (isset($GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'wp-login.php') {
$is_login_page = true;
}
// $_SERVER['PHP_SELF'] is equal to "/wp-login.php"?
if ($_SERVER['PHP_SELF'] == '/wp-login.php') {
$is_login_page = true;
}
return $is_login_page;
}