Wie kann ich überprüfen, ob die aktuelle Seite wp-login.php
oder ist wp-signup.php
?
Gibt es elegantere Lösungen als die Verwendung $_SERVER['REQUEST_URI']
?
Wie kann ich überprüfen, ob die aktuelle Seite wp-login.php
oder ist wp-signup.php
?
Gibt es elegantere Lösungen als die Verwendung $_SERVER['REQUEST_URI']
?
Antworten:
Verwenden Sie das globale $pagenow
, ein allgemeines globales Set, das von WordPress zur Laufzeit festgelegt wird:
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
Sie können auch die Art der Anmeldeseite überprüfen , z. B. 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();
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) Wenn Sie versuchen, die Anmeldeseite mit REQUEST_URI
(oder SCRIPT_PATH
) zu überprüfen , erhalten Sie manchmal falsche Werte, da viele Plugins die Anmelde- und Administrations- URLs ändern.
2) $pagenow
gibt Ihnen in diesem Fall auch einen falschen Wert!
get_included_files()
die genaueste Lösung zu sein scheint (zumindest für mich).
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 sich WP in einem Unterordner befindet.
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. Das fühlt sich für mich ein bisschen sauberer an.
$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 dein wordpress nicht im web root ordner installiert ist, solltest du einige params verwenden YOUR_WP_PATH/wp-login.php
, um die elemente im array zu ersetzen.
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 ...
Ich interessiere mich nur für die Registrierungsseite, nicht für die Anmeldeseite. Das wird vielleicht nicht von jedem gewünscht.
$ GLOBALS ['pagenow'] gibt index.php für mich zurück. Möglicherweise wegen buddypress oder meines Themas.
Also habe ich benutzt
is_page('register')
Wenn Sie den Hauptteil der Registrierungsseite überprüfen, hat diese auch die ID. Wenn also die Seiten-ID-4906 angegeben ist , können Sie diese auf diese Weise verwenden, wenn sie besser funktioniert:
is_page('4906')
Keine der aktuellen Antworten hat für mich funktioniert.
Was ich getan habe, war zu überprüfen, ob das $_GET
Array einen "Seiten" -Schlüssel hat und ob sein Wert "Anmelden" ist.
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
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 berücksichtigt ?action=register
, der nur vorhanden ist, wenn Sie sich auf der Registrierungsseite befinden.
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;
}