¿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']
?
¿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']
?
Respuestas:
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 puede verificar el tipo de 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 se debe usar ( wp-register.php
se desaprobó y posteriormente se eliminó hace bastante tiempo):
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) 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 las URL de INICIAR SESIÓN y ADMINISTRAR .
2) ¡también $pagenow
le dará un valor incorrecto en ese caso!
get_included_files()
parece la solución más precisa (al menos para mí).
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){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. Eso me parece un poco más limpio.
$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 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 usando el método wp_login_url () propio 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 terminarse) debería ser suficiente ... Sin embargo, significa que un desarrollador de plugins o temas que cambia el formulario de inicio de sesión predeterminado debe haberlo hecho. así que la forma correcta ...
Solo estoy interesado en la página de registro, no en la página de inicio de sesión. Por lo tanto, esto podría no ser querido por todos.
$ GLOBALS ['pagenow'] me devuelve index.php. Tal vez por buddypress o mi tema.
Entonces solía
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')
Ninguna de las respuestas actuales me funcionó.
Lo que hice fue verificar si la $_GET
matriz tiene una clave de 'página' y si su valor es 'iniciar sesión'.
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
Algunas soluciones propuestas aquí funcionaron, así que he encontrado 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.
Aquí hay una versión PSR-2 de la respuesta @ T.Todua. Acabo de formatearlo bien. Es mejor manipular la función, como agregar un filtro con 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;
}