Frage

Wie kann ich überprüfen, ob die aktuelle Seite ist wp-login.php oder wp-signup.php ?

Gibt es elegantere Lösungen als verwendet? $_SERVER['REQUEST_URI'] ?

War es hilfreich?

Lösung

Verwenden Sie die globale $pagenow, das ist ein gemeinsamer globaler Global von WordPress zur Laufzeit:

if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
    // We're on the login page!
}

Sie können auch das überprüfen Typ der Anmeldeseite, zum Beispiel Registrierung:

if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
    // We're registering
}

Der folgende Code wird als Vermächtnis angesehen und sollte nicht verwendet werden (wp-register.php wurde veraltet und anschließend vor einiger Zeit entfernt):

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

Andere Tipps

Der einzige zuverlässige Weg:

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

Warum ist es am sichersten?

1) Manchmal, wenn Sie versuchen, die Anmeldeseite mithilfe der Anmeldeseite zu überprüfen REQUEST_URI(oder SCRIPT_PATH), Sie erhalten falsche Werte, da sich viele Plugins ändern Login & Admin URLs.
2) $pagenow Gibt Ihnen in diesem Fall auch einen falschen Wert!

Anmerkungen:

  • In einigen Fällen kann es nicht funktionieren, wenn Sie auf anderen Vorlagendateien/Seiten manuell ausgeben.

Eine modernere Möglichkeit, dies zu tun, sollte es auch dann funktionieren, wenn die WP-Login-URL durch Plugins geändert wird und wenn WP in einem Unterordner usw. ist:

if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
    /* ... */
}

$GLOBALS['pagenow'] Funktioniert nicht, benutze $_SERVER['PHP_SELF'].

if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
    // do something.
}

Und wenn Ihr WordPress nicht im Web -Root -Ordner installiert ist, sollten Sie einige Parameter wie verwenden YOUR_WP_PATH/wp-login.php Ersetzen Sie die Elemente in Array.

Ich habe es mit WordPress eigener WP_login_url () -Methode wie folgt implementiert:

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

Wenn Sie nur beide Pfade vergleichen (weil es schwierig ist, sich über die Verwendung von SSL abzuwenden, die möglicherweise beendet werden kann) sollte ausreichen ... Dies bedeutet jedoch, dass ein Plugin- oder Theme -Entwickler, der das Standard -Anmeldeformular ändert Also der richtige Weg ...

Ich interessiere mich nur für die Register -Seite, nicht an der Anmeldeseite. Das könnte also nicht von jedem gesucht werden.

$ Globals ['pagenow'] gibt Index.php für mich zurück. Vielleicht wegen Buddypress oder meinem Thema.

Also habe ich benutzt

is_page('register')

Wenn Sie den Körper der Registrierungsseite überprüfen, hat sie auch die ID. Wenn Sie also sagen Page-ID-4906, Sie können es so verwenden, wenn es besser funktioniert:

is_page('4906')

Keine der aktuellen Antworten funktionierte für mich.

Was ich getan habe, war zu prüfen, ob $_GET Array hat eine "Seite" -Taste und wenn sein Wert "Anmeldung" ist.

if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
   // you're on login page
}

Ein paar hier vorgeschlagene Lösungen haben funktioniert, also habe ich mit etwas wirklich Einfachem gekommen, das auf einer gewöhnlichen WordPress -Site funktioniert (nicht auf Multisite getestet).

So einfach wie:

    if( !isset($_GET['action']) ){
        echo 'This is the Login Page.';
    } else { 
        echo 'This is the Register Page.';
    }

Es berücksichtigt den URL -Parameter ?action=register, was nur existiert, wenn Sie auf der Registrierungsseite stehen.

Hier ist eine PSR-2-Version von @T.Todua Antwort. Ich habe es einfach gut formatiert. Dies ist besser, um die Funktion zu manipulieren, z. B. das Hinzufügen eines Filters für Testzwecke usw.:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top