当前位置: 首页>>技术解读>>正文


检查wp-login是否是当前页面

webfans 技术解读 , , , , 去评论

问题描述

如何检查当前页面是wp-login.php还是wp-signup.php

有没有比使用$_SERVER['REQUEST_URI']更优雅的解决方案?

最佳解决思路

使用全局$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&管理员网址。 2)在这种情况下,$pagenow也会给你不正确的值!

第三种解决思路

$GLOBALS['pagenow']不起作用,请使用$_SERVER['PHP_SELF']

if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
    // do something.
}

如果你的wordpress没有安装在web根文件夹中,你应该使用一些参数如YOUR_WP_PATH/wp-login.php来替换数组中的元素。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2470.html,转载请务必附带本地址声明。