Як я можу перевірити, чи є поточна сторінка wp-login.php
чи wp-signup.php
?
Чи є більш елегантні рішення, ніж використання $_SERVER['REQUEST_URI']
?
Як я можу перевірити, чи є поточна сторінка wp-login.php
чи wp-signup.php
?
Чи є більш елегантні рішення, ніж використання $_SERVER['REQUEST_URI']
?
Відповіді:
Використовуйте глобальний $pagenow
, який є загальним глобальним набором WordPress під час виконання:
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
Ви також можете перевірити тип сторінки для входу, наприклад реєстрацію:
if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
// We're registering
}
Наступний код вважається застарілим і не повинен використовуватися ( wp-register.php
був застарілий і згодом видалений досить довго):
if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
run_my_funky_plugin();
if( is_wplogin() ){
...
}
код:
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) Іноді, якщо ви спробуєте перевірити сторінку входу за допомогою REQUEST_URI
(або SCRIPT_PATH
), ви отримаєте НЕПРОМЕННІ ЦІННОСТІ, оскільки багато плагінів змінюють URL-адреси ЛОГІН & АДМІН .
2) $pagenow
дасть вам неправильне значення і в цьому випадку!
get_included_files()
здається найточнішим рішенням (принаймні для мене).
Більш сучасний спосіб зробити це, він повинен працювати навіть тоді, коли URL-адресу wp-login змінюється плагінами та коли WP знаходиться в підпапці тощо:
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. Це відчуває мене трохи чистіше.
$GLOBALS['pagenow']
не працює, використовуй $_SERVER['PHP_SELF']
.
if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
// do something.
}
і якщо ваш wordpress не встановлений у веб-кореневій папці, вам слід скористатися деякими парамами, як, наприклад, YOUR_WP_PATH/wp-login.php
для заміни елементів масиву.
Я реалізував це за допомогою власного методу wp_login_url () WordPress таким чином:
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 );
}
Просто порівняння обох шляхів (оскільки важко бути абсолютно впевненим у використанні SSL, оскільки воно може бути припинене) повинно бути достатньо ... Але це означає, однак, що плагін або розробник теми, який змінює форму входу за замовчуванням, повинен був зробити тому правильний шлях ...
Мене цікавить лише сторінка реєстрації, а не сторінка входу. Тож цього можуть не хотіти всі.
$ GLOBALS ['pagenow'] повертає index.php для мене. Можливо через приятельку чи мою тему.
Так я і використовував
is_page('register')
Якщо ви оглядаєте тіло сторінки реєстрації, у нього також є ідентифікатор, тому якщо він пише page-id-4906 , ви можете використовувати його таким чином, якщо він працює краще:
is_page('4906')
Жодна з нинішніх відповідей не працювала для мене.
Що я зробив, це перевірити, чи $_GET
є в масиві ключ "сторінка" і чи є його значення "вхід".
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
Кілька запропонованих тут рішень спрацювали, тому я придумав щось по-справжньому просте, яке працює на звичайному сайті WordPress (не тестується на Multisite).
Настільки ж просто, як:
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
Він враховує параметр url ?action=register
, який існує лише тоді, коли ви знаходитесь на сторінці реєстрації.
Ось версія PSR-2 відповіді @ T.Todua. Я просто це добре відформатував. Краще маніпулювати функцією, такою як додавання фільтра для цілей тестування тощо:
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;
}