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.