WordPress – 如何检测当前页面是否为登录页面

更新于 2022年1月14日 wordpress教程

有没有比使用全局变量$pagenow来检测当前页面(如果它是登录页面is_admin()更好的方法,比如is_admin()函数?

WordPress – 如何检测当前页面是否为登录页面

if ($pagenow != 'wp-login.php' && !is_admin())
{
    // Do something
}

有一个带有 getter get_current_screen()的全局变量$current_screen (在/wp-admin/includes/template.php声明)但它总是等于null

在#15686(检测当前页面模板标签) – WordPress Trac 它说$pagenow它通常被使用,但我认为这不是将非动态页面与文件名而不是功能(如管理页面)进行比较的好方法.

解决方案

虽然我倾向于同意其他人需要函数 is_login_page() 或类似的东西,

<?php
function is_login_page() {
    return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'));
}

如果您像我一样,实际上尝试取消注册/弄乱 WordPress 自动加载的 jQuery,那么正确答案是:

不要使用wp_print_styles来注册你的脚本——改用wp_enqueue_scripts

这个钩子只会在前端运行,而不是在登录页面上运行,所以不需要解决方法。

你不能解释一下你打算用它做什么吗? 所以我可以告诉你是否应该使用 wordpress hooks 进行编码。

或者您可以使用绝对uri,只需将其与 wp-login.php 匹配即可

<?php
$uri = $_SERVER['REQUEST_URI'];

echo $uri;

?>

如果您想尽可能不独立于 WP; 例如在一个插件中,使未来的更改超出范围。 你可以使用这样的东西:

function is_login_page() {
    return !strncmp($_SERVER['REQUEST_URI'], '/wp-login.php', strlen('/wp-login.php'));
}

如果有人使用插件来更改他的登录页面 URL,上述所有方法都将不起作用。 如果您的登录页面 URL 被任何安全插件(如 (Lockdown WP Amin) 或类似插件)更改,那么您可以使用此高级完整功能。 这是我现在最好的方法:

//---------------------------------------------------------------
//Check if we are inside the login page or not
//---------------------------------------------------------------
function is_inside_login_page()
{
    //true if login page URL is still normal
    if(in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'))) return true;
    
    //true if login page URL is changed by some security plugins
    if(has_action('login_init')) return true;
    
    //Else if nothing above happens >> return false
    return false;
}
好看 (0) 很好看 (0) 非常好看 (0)
赞赏

微信赞赏支付宝赞赏