Compruebe si wp-login es la página actual

37

¿Cómo puedo verificar si la página actual es wp-login.php o wp-signup.php ?

¿Hay soluciones más elegantes que usar $_SERVER['REQUEST_URI'] ?

    
pregunta onetrickpony 23.03.2011 - 22:25

6 respuestas

50

Utilice el $pagenow global, que es un conjunto global común de WordPress en el tiempo de ejecución:

if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
    // We're on the login page!
}

También puede consultar el tipo de la página de inicio de sesión, por ejemplo, el registro:

if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
    // We're registering
}

El siguiente código se considera heredado y no debe utilizarse ( wp-register.php está en desuso y, posteriormente, se eliminó hace bastante tiempo):

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

    
respondido por el TheDeadMedic 23.03.2011 - 22:59
10

LA ÚNICA MANERA CONFIABLE:

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 qué es más seguro?

1) A veces, si intenta revisar la página de inicio de sesión usando REQUEST_URI (o SCRIPT_PATH ), obtendrá VALORES INCORRECTOS, porque muchos complementos cambian LOGIN & ADMINISTRADOR urls.
2) $pagenow te dará un valor incorrecto también en ese caso!

Notas:

  • En algunos casos, es posible que no funcione si imprime el formulario de inicio de sesión (es decir, con un código abreviado o etc.) manualmente en otras páginas / archivos de plantillas.
respondido por el T.Todua 27.08.2016 - 11:13
3

$GLOBALS['pagenow'] no funciona, use $_SERVER['PHP_SELF'] .

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

y si su wordpress no está instalado en la carpeta raíz web, debe usar algunos parámetros como YOUR_WP_PATH/wp-login.php para reemplazar los elementos en la matriz.

    
respondido por el dallaslu 25.11.2014 - 09:21
1

Una forma más moderna de hacerlo, debería funcionar incluso cuando los complementos cambian la URL de inicio de sesión de wp y cuando WP está en una subcarpeta, etc.:

if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
    /* ... */
}
    
respondido por el Firsh - letsWP.io 01.05.2016 - 00:11
0

Sólo estoy interesado en la página de registro, no en la página de inicio de sesión. Así que esto puede no ser deseado por todos.

$ GLOBALS ['pagenow'] devuelve index.php para mí. Tal vez debido a buddypress o mi tema.

Así que utilicé

is_page('register')

Si inspecciona el cuerpo de la página de registro, también tiene el ID, así que si dice page-id-4906 , puede usarlo de esta manera si funciona mejor:

is_page('4906')
    
respondido por el zeta 16.09.2015 - 22:30
0

Algunas soluciones propuestas aquí funcionaron, así que vine con algo realmente simple que funciona en un sitio ordinario de WordPress (no probado en Multisite).

Tan simple como:

    if( !isset($_GET['action']) ){
        echo 'This is the Login Page.';
    } else { 
        echo 'This is the Register Page.';
    }

Tiene en cuenta el parámetro url ?action=register , que solo existe cuando estás en la página de registro.

    
respondido por el Adriano Monecchi 24.09.2016 - 17:52

Lea otras preguntas en las etiquetas