Jak mogę sprawdzić, czy bieżąca strona to wp-login.php
lub wp-signup.php
?
Czy są bardziej eleganckie rozwiązania niż używanie $_SERVER['REQUEST_URI']
?
Jak mogę sprawdzić, czy bieżąca strona to wp-login.php
lub wp-signup.php
?
Czy są bardziej eleganckie rozwiązania niż używanie $_SERVER['REQUEST_URI']
?
Odpowiedzi:
Użyj globalnego $pagenow
, który jest wspólnym globalnym zestawem WordPressa w czasie wykonywania:
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
Możesz także sprawdzić typ strony logowania, na przykład rejestracja:
if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
// We're registering
}
Poniższy kod jest uważany za starszy i nie powinien być używany ( wp-register.php
został wycofany, a następnie został usunięty dość dawno temu):
if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
run_my_funky_plugin();
if( is_wplogin() ){
...
}
kod:
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) Czasami, jeśli spróbujesz sprawdzić stronę logowania za pomocą REQUEST_URI
(lub SCRIPT_PATH
), otrzymasz NIEWŁAŚCIWE WARTOŚCI, ponieważ wiele wtyczek zmienia adresy URL LOGOWANIA i ADMINISTRACJI .
2) $pagenow
w tym przypadku również poda niepoprawną wartość!
get_included_files()
wydaje się najdokładniejsze rozwiązanie (przynajmniej dla mnie).
Bardziej nowoczesny sposób na to, powinien działać nawet wtedy, gdy adres URL wp-login jest zmieniany przez wtyczki i gdy WP znajduje się w podfolderze itp .:
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. To wydaje mi się trochę czystsze.
$GLOBALS['pagenow']
nie działa, użyj $_SERVER['PHP_SELF']
.
if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
// do something.
}
a jeśli twoje wordpress nie jest zainstalowane w folderze głównym, powinieneś użyć params, takich jak YOUR_WP_PATH/wp-login.php
zamiana elementów w tablicy.
Zaimplementowałem go za pomocą własnej metody wp_login_url () WordPress w następujący sposób:
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 );
}
Wystarczy porównanie obu ścieżek (ponieważ trudno jest mieć absolutną pewność co do użycia protokołu SSL, ponieważ może on zostać zakończony) powinno wystarczyć ... Oznacza to jednak, że programista wtyczki lub motywu, który zmienia domyślny formularz logowania, musiał to zrobić więc właściwy sposób ...
Interesuje mnie tylko strona rejestracji, a nie strona logowania. Więc nie wszyscy mogą tego chcieć.
$ GLOBALS ['pagenow]] zwraca dla mnie index.php. Może z powodu buddypress lub mojego tematu.
Więc użyłem
is_page('register')
Jeśli przejrzysz treść strony rejestracji, ma ona również identyfikator, więc jeśli wyświetla się strona-id-4906 , możesz użyć jej w ten sposób, jeśli działa lepiej:
is_page('4906')
Żadna z obecnych odpowiedzi nie działała dla mnie.
To, co zrobiłem, to sprawdzenie, czy $_GET
tablica ma klucz „page” i czy jego wartością jest „logowanie”.
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
Kilka zaproponowanych tutaj rozwiązań zadziałało, więc znalazłem coś naprawdę prostego, co działa na zwykłej stronie WordPress (nie testowane na Multisite).
Tak prosty jak:
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
Uwzględnia parametr url ?action=register
, który istnieje tylko wtedy, gdy jesteś na stronie rejestracji.
Oto wersja odpowiedzi @ T.Todua na PSR-2. Właśnie ładnie go sformatowałem. Lepiej jest manipulować funkcją, na przykład dodając filtr do celów testowych itp .:
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;
}