Comment puis-je vérifier si la page actuelle est wp-login.php
ou wp-signup.php
?
Existe-t-il des solutions plus élégantes que d'utiliser $_SERVER['REQUEST_URI']
?
Utilisez le $pagenow
global, 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 consulter la page type de la 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 hérité et ne doit pas être utilisé (wp-register.php
est obsolète puis supprimé depuis un certain temps):
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 INCORRECTES, car de nombreux plugins changent LOGIN & ADMIN urls.
2) $pagenow
vous donnera également une valeur incorrecte dans ce cas!
$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 des paramètres tels que YOUR_WP_PATH/wp-login.php
pour remplacer les éléments du tableau.
Plus moderne, cela devrait fonctionner même lorsque l’URL de connexion wp-login est modifié par des plugins et que WP se trouve dans un sous-dossier, etc.:
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
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.
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 );
}
Juste comparer les deux chemins (car il est difficile d’être absolument sûr de l’utilisation de SSL car il peut être résilié) devrait suffire ... Cela signifie cependant qu’un développeur de plug-in ou de thème qui modifie le formulaire de connexion par défaut doit l’avoir fait. donc le bon chemin ...
Voici une version PSR-2 de la réponse @ T.Todua. Je viens de bien le formater. 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;
}
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 un 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')