Pregunta

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

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

¿Fue útil?

Solución

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

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

También puedes verificar el escribe de la página de inicio de sesión, por ejemplo, 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 usarse (wp-register.php fue desaprobado y posteriormente eliminado hace bastante tiempo):

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

Otros consejos

La única forma 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 verificar la página de inicio de sesión usando REQUEST_URI(o SCRIPT_PATH), obtendrá valores incorrectos, porque muchos complementos cambian Iniciar sesión y administrador URLS.
2) $pagenow ¡También le dará un valor incorrecto en ese caso!

Notas:

  • En algunos casos, es posible que no funcione si emite una forma de inicio de sesión (es decir, con un código corto, etc.) manualmente en otros archivos/páginas de plantilla.

Una forma más moderna de hacerlo, debería funcionar incluso cuando la URL WP-Login cambia mediante complementos y cuando WP está en una subcarpeta, etc.:

if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
    /* ... */
}

$GLOBALS['pagenow'] no funciona, usa $_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 de raíz web, debe usar algunos parámetros como YOUR_WP_PATH/wp-login.php Para reemplazar los elementos en la matriz.

Lo he implementado utilizando el método wp_login_url () de WordPress de la siguiente manera:

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

Simplemente comparar ambas rutas (porque es difícil estar absolutamente seguro sobre el uso de SSL, ya que puede terminar) debería ser suficiente ... Sin embargo, significa que un complemento o desarrollador de temas que cambia el formulario de inicio de sesión predeterminado debe haber hecho Entonces la forma correcta ...

Solo estoy interesado en la página de registro, no en la página de inicio de sesión. Así que esto podría no ser querido por todos.

$ Globals ['Pagenow'] Devuelve index.php para mí. Tal vez por BuddyPress o mi tema.

Entonces usé

is_page('register')

Si inspecciona el cuerpo de la página de registro, también tiene la identificación, por lo que si dice Page-ID-4906, puedes usarlo de esta manera si funciona mejor:

is_page('4906')

Ninguna de las respuestas actuales funcionó para mí.

Lo que he hecho fue verificar si $_GET Array tiene una clave de 'página' y si su valor es 'inicio de sesión'.

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

Algunas soluciones propuestas aquí funcionaron aquí, así que he venido 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 de URL ?action=register, que solo existe cuando está en la página de registro.

Aquí hay una versión PSR-2 de @t.todua respuesta. Lo acabo de formatear bien. Esto es mejor manipular la función, como agregar un filtro para fines de prueba, 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;
}
Licenciado bajo: CC-BY-SA con atribución
scroll top