Vérifier si wp-login est la page actuelle

37

Comment puis-je vérifier si la page en cours est wp-login.php ou wp-signup.php ?

Existe-t-il des solutions plus élégantes que d'utiliser $_SERVER['REQUEST_URI'] ?

    
posée onetrickpony 23.03.2011 - 22:25

6 réponses

50

Utilisez le global $pagenow , qui est un ensemble global 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 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 était obsolète puis supprimé depuis un certain temps):

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

    
réponse donnée TheDeadMedic 23.03.2011 - 22:59
10

LA SEULE MANIÈRE FIABLE:

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

Pourquoi c'est le plus sûr?

1) Parfois, si vous essayez de vérifier la page de connexion à l'aide de REQUEST_URI (ou SCRIPT_PATH ), vous obtiendrez des valeurs inexactes, car de nombreux plugins changent LOGIN & ADMIN urls.
2) $pagenow vous donnera une valeur incorrecte aussi dans ce cas!

Notes:

  • Dans certains cas, cela pourrait ne pas fonctionner si vous générez manuellement le formulaire de connexion (c'est-à-dire avec un shortcode ou autre) sur d'autres fichiers / pages de modèles.
réponse donnée T.Todua 27.08.2016 - 11:13
3

$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.

    
réponse donnée dallaslu 25.11.2014 - 09:21
1

Plus moderne, cela devrait fonctionner même lorsque l'URL de connexion wp-login est modifiée par des plugins et lorsque WP est dans un sous-dossier, etc.:

if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
    /* ... */
}
    
réponse donnée Firsh - letsWP.io 01.05.2016 - 00:11
0

Je ne m'intéresse qu'à la page d'inscription, pas à 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 identifiant. Par conséquent, s'il indique page-id-4906 , vous pouvez l'utiliser de cette manière si cela fonctionne mieux:

is_page('4906')
    
réponse donnée zeta 16.09.2015 - 22:30
0

Quelques solutions proposées ici ont fonctionné. Je suis donc venu avec quelque chose de vraiment 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 d'URL ?action=register , qui n'existe que lorsque vous êtes sur la page d'enregistrement.

    
réponse donnée Adriano Monecchi 24.09.2016 - 17:52

Lire d'autres questions sur les étiquettes