wake-up-neo.com

Überprüfen Sie, ob es sich bei wp-login um die aktuelle Seite handelt

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

Gibt es elegantere Lösungen als die Verwendung von $_SERVER['REQUEST_URI']?

43
onetrickpony

Verwenden Sie den globalen $pagenow, einen allgemeinen globalen Satz, der von WordPress zur Laufzeit festgelegt wird:

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

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

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

Der folgende Code gilt als Legacy und sollte nicht verwendet werden (wp-register.php wurde vor einiger Zeit veraltet und anschließend entfernt):

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

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) Wenn Sie versuchen, die Anmeldeseite mit REQUEST_URI (oder SCRIPT_PATH) zu überprüfen, erhalten Sie manchmal falsche Werte, da viele Plugins LOGIN & ADMIN urls ändern.
2) $pagenow liefert auch in diesem Fall einen falschen Wert!

Anmerkungen:

  • In einigen Fällen funktioniert es möglicherweise nicht, wenn Sie das Anmeldeformular (d. H. Mit Shortcode oder usw.) manuell auf anderen Vorlagendateien/-seiten ausgeben.
12
T.Todua

$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-Stammordner installiert ist, sollten Sie einige Parameter wie YOUR_WP_PATH/wp-login.php verwenden, um die Elemente im Array zu ersetzen.

3
dallaslu

Eine modernere Möglichkeit, dies zu tun, sollte auch dann funktionieren, wenn die URL für die WP-Anmeldung durch Plugins geändert wird und wenn sich WP in einem Unterordner befindet, usw.:

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

Einige der hier vorgeschlagenen Lösungen haben funktioniert, daher habe ich etwas wirklich Einfaches mitgebracht, das auf einer normalen 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.';
    }

Dabei wird der URL-Parameter ?action=register berücksichtigt, der nur vorhanden ist, wenn Sie sich auf der Registrierungsseite befinden.

0

Ich habe es mit der WordPress-eigenen 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 );
}

Ein einfacher Vergleich beider Pfade (da es schwierig ist, sich über die Verwendung von SSL absolut sicher zu sein, da es möglicherweise beendet wird) sollte ausreichen ... Dies bedeutet jedoch, dass ein Plug-in- oder Designentwickler, der das Standardanmeldeformular ändert, dies getan haben muss Also der richtige Weg ...

0
Mavawie

Hier ist eine PSR-2-Version von @ T.Todua Antwort. Ich habe es nur schön formatiert. Dies ist besser, um die Funktion zu manipulieren, wie z. B. das Hinzufügen eines Filters zu Testzwecken 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;
}
0

Ich interessiere mich nur für die Registrierungsseite, nicht für die Anmeldeseite. Das wird vielleicht nicht von allen gewünscht.

$ GLOBALS ['pagenow'] gibt für mich index.php zurück. Möglicherweise wegen buddypress oder meines Themas.

Also habe ich benutzt

is_page('register')

Wenn Sie den Hauptteil der Registrierungsseite überprüfen, enthält diese auch die ID. Wenn also page-id-4906 angegeben ist, können Sie diese auf diese Weise verwenden, wenn sie besser funktioniert:

is_page('4906')
0
zeta