Làm cách nào để kiểm tra xem trang hiện tại có wp-login.php
hay wp-signup.php
không?
Có giải pháp thanh lịch hơn so với sử dụng $_SERVER['REQUEST_URI']
?
Làm cách nào để kiểm tra xem trang hiện tại có wp-login.php
hay wp-signup.php
không?
Có giải pháp thanh lịch hơn so với sử dụng $_SERVER['REQUEST_URI']
?
Câu trả lời:
Sử dụng toàn cầu $pagenow
, là một toàn cầu phổ biến được thiết lập bởi WordPress khi chạy:
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
Bạn cũng có thể kiểm tra loại trang đăng nhập, ví dụ đăng ký:
if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
// We're registering
}
Mã sau đây được coi là di sản và không nên được sử dụng ( wp-register.php
đã bị phản đối và sau đó bị xóa khá lâu):
if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
run_my_funky_plugin();
if( is_wplogin() ){
...
}
mã:
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) Đôi khi, nếu bạn cố kiểm tra trang đăng nhập bằng cách sử dụng REQUEST_URI
(hoặc SCRIPT_PATH
), bạn sẽ nhận được GIÁ TRỊ TUYỆT VỜI, vì nhiều plugin thay đổi url ĐĂNG NHẬP & ADMIN .
2) $pagenow
sẽ cung cấp cho bạn giá trị không chính xác trong trường hợp đó!
get_included_files()
giải pháp có vẻ chính xác nhất (ít nhất là đối với tôi).
Cách hiện đại hơn để làm điều đó, nó sẽ hoạt động ngay cả khi URL đăng nhập wp bị thay đổi bởi các plugin và khi WP ở trong thư mục con, v.v .:
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. Điều đó cảm thấy sạch sẽ hơn một chút với tôi.
$GLOBALS['pagenow']
không làm việc, sử dụng $_SERVER['PHP_SELF']
.
if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
// do something.
}
và nếu wordpress của bạn không được cài đặt trong thư mục gốc của web, bạn nên sử dụng một số thông số như YOUR_WP_PATH/wp-login.php
để thay thế các thành phần trong mảng.
Tôi đã triển khai nó bằng phương thức wp_login_url () của WordPress như sau:
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 );
}
Chỉ cần so sánh cả hai đường dẫn (vì khó có thể hoàn toàn chắc chắn về việc sử dụng SSL vì nó có thể bị chấm dứt) là đủ ... Tuy nhiên, điều đó có nghĩa là một plugin hoặc nhà phát triển chủ đề thay đổi hình thức đăng nhập mặc định phải thực hiện vì vậy cách thích hợp ...
Tôi chỉ quan tâm đến trang đăng ký, không phải trong trang đăng nhập. Vì vậy, điều này có thể không phải ai cũng muốn.
$ GLOBALS ['pagenow'] trả về index.php cho tôi. Có lẽ vì bạn thân hoặc chủ đề của tôi.
Vì vậy, tôi đã sử dụng
is_page('register')
Nếu bạn kiểm tra phần thân của trang đăng ký, nó cũng có ID, vì vậy nếu nó nói trang-id-4906 , bạn có thể sử dụng nó theo cách này nếu nó hoạt động tốt hơn:
is_page('4906')
Không có câu trả lời hiện tại làm việc cho tôi.
Những gì tôi đã làm là kiểm tra xem $_GET
mảng có khóa 'trang' hay không và giá trị của nó có phải là 'đăng nhập' hay không.
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
Một vài giải pháp được đề xuất ở đây đã hoạt động, vì vậy tôi đã đưa ra một thứ thực sự đơn giản hoạt động trên một trang web WordPress thông thường (không được thử nghiệm trên Multisite).
Đơn giản như:
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
Nó tính đến tham số url ?action=register
, chỉ tồn tại khi bạn ở trên trang đăng ký.
Đây là phiên bản PSR-2 của câu trả lời @ T.Todua. Tôi chỉ định dạng nó độc đáo. Điều này tốt hơn để thao tác chức năng, chẳng hạn như thêm bộ lọc cho mục đích thử nghiệm, v.v .:
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;
}