Como posso verificar se a página atual é wp-login.php
ou wp-signup.php
?
Existem soluções mais elegantes do que usar $_SERVER['REQUEST_URI']
?
Como posso verificar se a página atual é wp-login.php
ou wp-signup.php
?
Existem soluções mais elegantes do que usar $_SERVER['REQUEST_URI']
?
Respostas:
Use o global $pagenow
, que é um conjunto global comum do WordPress em tempo de execução:
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
Você também pode verificar o tipo de página de login, por exemplo, registro:
if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
// We're registering
}
O código a seguir é considerado herdado e não deve ser usado ( wp-register.php
foi descontinuado e subsequentemente removido há um bom tempo):
if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
run_my_funky_plugin();
if( is_wplogin() ){
...
}
código:
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) Às vezes, se você tentar verificar a página de login usando REQUEST_URI
(ou SCRIPT_PATH
), receberá VALORES INCORRETOS, porque muitos plug-ins alteram os URLs de LOGIN e ADMIN .
2) $pagenow
também fornecerá valor incorreto nesse caso!
get_included_files()
parece a solução mais precisa (pelo menos para mim).
Uma maneira mais moderna de fazer isso, deve funcionar mesmo quando o URL do wp-login for alterado por plug-ins e quando o WP estiver em uma subpasta, etc:
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. Isso me parece um pouco mais limpo.
$GLOBALS['pagenow']
não funciona, use $_SERVER['PHP_SELF']
.
if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
// do something.
}
e se o seu wordpress não estiver instalado na pasta raiz da web, você deve usar alguns parâmetros como YOUR_WP_PATH/wp-login.php
substituir os elementos na matriz.
Eu o implementei usando o próprio método wp_login_url () do WordPress, da seguinte maneira:
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 );
}
Basta comparar os dois caminhos (porque é difícil ter certeza absoluta sobre o uso do SSL, pois ele pode ser finalizado) deve ser suficiente ... Isso significa, no entanto, que um desenvolvedor de plug-in ou tema que altera o formulário de login padrão deve ter feito então da maneira correta ...
Estou interessado apenas na página de registro, não na página de login. Portanto, isso pode não ser desejado por todos.
$ GLOBALS ['pagenow'] retorna index.php para mim. Talvez por causa do buddypress ou do meu tema.
Então eu usei
is_page('register')
Se você inspecionar o corpo da página de registro, ele também possui o ID; portanto, se estiver escrito page-id-4906 , você poderá usá-lo desta maneira se funcionar melhor:
is_page('4906')
Nenhuma das respostas atuais funcionou para mim.
O que fiz foi verificar se a $_GET
matriz possui uma chave de 'página' e se o valor é ' entrar '.
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
Algumas soluções propostas aqui funcionaram, então eu vim com algo realmente simples que funciona em um site WordPress comum (não testado no Multisite).
Tão simples quanto:
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
Ele leva em consideração o parâmetro url ?action=register
, que só existe quando você está na página de registro.
Aqui está uma versão PSR-2 da resposta @ T.Todua. Eu apenas o formatei bem. É melhor manipular a função, como adicionar um filtro para fins de teste, etc:
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;
}