web-dev-qa-db-fra.com

Vérifiez si wp-login est la page actuelle

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']?

43
onetrickpony

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();
56
TheDeadMedic

LE SEUL MANIER 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 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!

Remarques:

  • 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 modèles de fichiers/pages.
12
T.Todua

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

3
dallaslu

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){
    /* ... */
}
1
Firsh - LetsWP.io

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.

0
Adriano Monecchi

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

0
Mavawie

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;
}
0
Lucas Bustamante

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')
0
zeta