Comment puis-je vérifier si la page actuelle est wp-login.php
ou wp-signup.php
?
Y a-t-il des solutions plus élégantes que d'utiliser $_SERVER['REQUEST_URI']
?
Comment puis-je vérifier si la page actuelle est wp-login.php
ou wp-signup.php
?
Y a-t-il des solutions plus élégantes que d'utiliser $_SERVER['REQUEST_URI']
?
Réponses:
Utilisez le global $pagenow
, qui est un ensemble global commun défini par WordPress lors de l'exécution:
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
Vous pouvez également vérifier le type de page de connexion, par exemple l'enregistrement:
if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
// We're registering
}
Le code suivant est considéré comme étant hérité et ne doit pas être utilisé (il wp-register.php
était obsolète puis supprimé depuis longtemps):
if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
run_my_funky_plugin();
if( is_wplogin() ){
...
}
code:
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) Parfois, si vous essayez de vérifier la page de connexion en utilisant REQUEST_URI
(ou SCRIPT_PATH
), vous obtiendrez des valeurs inexactes, car de nombreux plugins changent les URL LOGIN & ADMIN .
2) $pagenow
vous donnera une valeur incorrecte aussi dans ce cas!
get_included_files()
la solution semble la plus précise (du moins pour moi).
Plus moderne, cela devrait fonctionner même lorsque l'URL wp-login est modifiée par les plugins et que WP se trouve dans un sous-dossier, etc.:
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. Cela me semble un peu plus propre.
$GLOBALS['pagenow']
ne fonctionne pas, utilisez $_SERVER['PHP_SELF']
.
if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
// do something.
}
et si votre wordpress n’est pas installé dans le dossier racine Web, vous devez utiliser certains paramètres comme YOUR_WP_PATH/wp-login.php
pour remplacer les éléments du tableau.
Je l'ai implémenté en utilisant la propre méthode wp_login_url () de WordPress comme suit:
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 );
}
Il ne suffit que de comparer les deux chemins (car il est difficile d’être absolument sûr de l’utilisation de SSL car il peut être résilié) ... Cela signifie cependant qu’un développeur de plug-in ou de thème qui modifie le formulaire de connexion par défaut doit avoir effectué donc le bon chemin ...
Je ne suis intéressé que par la page d'inscription, pas par la page de connexion. Donc, cela pourrait ne pas être recherché par tout le monde.
$ GLOBALS ['pagenow'] renvoie index.php pour moi. Peut-être à cause de buddypress ou de mon thème.
Alors j'ai utilisé
is_page('register')
Si vous inspectez le corps de la page d'enregistrement, celle-ci possède également l'ID. Par conséquent, si elle indique page-id-4906 , vous pouvez l'utiliser de cette manière si cela fonctionne mieux:
is_page('4906')
Aucune des réponses actuelles n'a fonctionné pour moi.
Ce que j'ai fait était de vérifier si $_GET
array a une clé 'page' et si sa valeur est 'connexion'.
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
Quelques solutions proposées ici ont fonctionné, alors je suis arrivé avec quelque chose de très simple qui fonctionne sur un site WordPress ordinaire (non testé sur Multisite).
Aussi simple que:
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
Il prend en compte le paramètre url ?action=register
, qui n'existe que lorsque vous êtes sur la page d'inscription.
Voici une version PSR-2 de la réponse @ T.Todua. Je viens de le formater bien. Il est préférable de manipuler la fonction, par exemple en ajoutant un filtre à des fins de test, 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;
}