Bagaimana saya bisa mengecek apakah halaman saat ini adalah wp-login.php
atau wp-signup.php
?
Apakah ada solusi yang lebih elegan daripada menggunakan $_SERVER['REQUEST_URI']
?
Bagaimana saya bisa mengecek apakah halaman saat ini adalah wp-login.php
atau wp-signup.php
?
Apakah ada solusi yang lebih elegan daripada menggunakan $_SERVER['REQUEST_URI']
?
Jawaban:
Gunakan global $pagenow
, yang merupakan set global yang umum oleh WordPress saat runtime:
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
Anda juga dapat memeriksa jenis halaman login, misalnya pendaftaran:
if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
// We're registering
}
Kode berikut dianggap sebagai warisan dan tidak boleh digunakan ( wp-register.php
sudah usang & kemudian dihapus beberapa waktu lalu):
if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
run_my_funky_plugin();
if( is_wplogin() ){
...
}
kode:
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) Kadang-kadang, jika Anda mencoba untuk memeriksa halaman login menggunakan REQUEST_URI
(atau SCRIPT_PATH
), Anda akan mendapatkan NILAI TIDAK TEPAT, karena banyak plugin mengubah url LOGIN & ADMIN .
2) $pagenow
akan memberi Anda nilai yang salah juga dalam kasus itu!
get_included_files()
tampaknya solusi yang paling akurat (jangan sampai bagi saya).
Cara yang lebih modern untuk melakukannya, itu harus bekerja bahkan ketika URL wp-login diubah oleh plugins dan ketika WP berada dalam subfolder, dll:
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. Rasanya agak lebih bersih bagi saya.
$GLOBALS['pagenow']
tidak berfungsi, gunakan $_SERVER['PHP_SELF']
.
if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
// do something.
}
dan jika wordpress Anda tidak diinstal di folder root web, Anda harus menggunakan beberapa params YOUR_WP_PATH/wp-login.php
untuk mengganti elemen dalam array.
Saya telah menerapkannya menggunakan metode WordPress own wp_login_url () sebagai berikut:
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 );
}
Hanya membandingkan kedua jalur (karena sulit untuk benar-benar yakin tentang penggunaan SSL karena dapat diakhiri) sudah cukup ... Namun itu berarti, bahwa pengembang plugin atau tema yang mengubah formulir login default harus dilakukan jadi cara yang tepat ...
Saya hanya tertarik pada halaman register, bukan di halaman login. Jadi ini mungkin tidak diinginkan oleh semua orang.
$ GLOBALS ['pagenow'] mengembalikan index.php untuk saya. Mungkin karena buddypress atau tema saya.
Jadi saya menggunakan
is_page('register')
Jika Anda memeriksa isi halaman registrasi, ia juga memiliki ID, jadi jika ia mengatakan page-id-4906 , Anda dapat menggunakannya dengan cara ini jika berfungsi lebih baik:
is_page('4906')
Tidak ada jawaban saat ini yang berfungsi untuk saya.
Apa yang saya lakukan adalah memeriksa apakah $_GET
array memiliki kunci 'halaman' dan apakah nilainya 'masuk'.
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
Beberapa solusi yang diusulkan di sini berfungsi, jadi saya datang dengan sesuatu yang sangat sederhana yang berfungsi di situs WordPress biasa (tidak diuji pada Multisite).
Sesederhana:
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
Ini memperhitungkan parameter url ?action=register
, yang hanya ada ketika Anda berada di halaman pendaftaran.
Inilah jawaban PST-2 versi @ T.Todua. Saya baru saja memformatnya dengan baik. Ini lebih baik untuk memanipulasi fungsi, seperti menambahkan filter untuk tujuan pengujian, dll:
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;
}