Verifique se wp-login é a página atual


Respostas:


59

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.phpfoi descontinuado e subsequentemente removido há um bom tempo):

if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
    run_my_funky_plugin();


3
Isso funciona se o usuário alterar sua URL wp-login.php?
Lucas Bustamante

Boa pergunta do @LucasBustamante e suponho que seja facilmente testado. É muito importante destacar e economizar tempo de alguém.
Ryan Bayne

1
@ T.Todua forneceu uma resposta mais segura e confiável abaixo .
mopsyd

Para mim mesmo pagenow diz que é index.php ...
trainoasis

17

A ÚNICA MANEIRA CONFIÁVEL:

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');
}

Por que é mais seguro?

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) $pagenowtambém fornecerá valor incorreto nesse caso!

Notas:

  • Em alguns casos, pode não funcionar se você imprimir o formulário de login (por exemplo, com código de acesso ou etc) manualmente em outros arquivos / páginas de modelo.

2
Isto é fantástico. Usar os arquivos incluídos para determinar a localização de um visitante não é um cenário que já vi, mas faz sentido nesse caso.
Ryan Bayne

@RyanBayne thnx, sim, esta é a rara ocasião em que get_included_files()parece a solução mais precisa (pelo menos para mim).
T.Todua

Para mim ele retorna falso, como se não fosse uma página wp-login ... Também até US $ GLOBALS [ 'pagenow'] retorna index.php ...
trainoasis

@trainoasis provavelmente você está usando um formulário de login manual (como shortcode) na página inicial ou assim?
T.Todua

Não, wp-login.php normais :) Mas eu estou usando Sage and WooCommerce, talvez isso muda as coisas de alguma forma :)
trainoasis

3

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){
    /* ... */
}

1
Eu ia sugerir isso. Talvez o OP precise analisar os resultados de wp_login_url () e oly compare o caminho da web.
Svetoslav Marinov 18/01

1
Eu gosto desta resposta da melhor maneira. Para caber minhas preferências, eu tweaked-lo um pouco para: return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );. Isso me parece um pouco mais limpo.
Ian Dunn em

2

$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.phpsubstituir os elementos na matriz.


1

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


Para ignorar os parâmetros de URL, altere a última linha para: return substr (rtrim (strtolower ($ _SERVER ['REQUEST_URI']]), '/'), 0, strlen ($ login_path)) == $ login_path;
mattavatar 17/09

0

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')

2
Isso é válido apenas se um plug-in estiver modificando o login padrão.
Michael Ecklund

0

Nenhuma das respostas atuais funcionou para mim.

O que fiz foi verificar se a $_GETmatriz possui uma chave de 'página' e se o valor é ' entrar '.

if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
   // you're on login page
}

-1

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.


2
Essa certamente não é uma boa solução, você pode ter o parâmetro "action" em qualquer lugar nos seus modelos ou plugins personalizados, não é? :)
trainoasis

De fato. Pode funcionar para uma verificação simples ao enfileirar arquivos ou executar funções simples de modelo na página de login, mas existem maneiras mais seguras de conseguir isso.
Adriano Monecchi

-1

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;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.