ฉันจะตรวจสอบว่าหน้าปัจจุบัน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
) คุณจะได้รับค่า INCORRECT เนื่องจากปลั๊กอินจำนวนมากเปลี่ยนURL
เข้าสู่ระบบ & ADMIN
2) $pagenow
จะให้ค่าที่ไม่ถูกต้องในกรณีนั้นด้วย!
get_included_files()
ดูเหมือนว่าโซลูชันที่แม่นยำที่สุด (เพื่อฉันจะได้)
วิธีที่ทันสมัยกว่าในการทำเช่นนั้นควรทำงานแม้ว่าจะมีการเปลี่ยน URL การเข้าสู่ระบบ wp โดยปลั๊กอินและเมื่อ 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.
}
และหากเวิร์ดเพรสของคุณไม่ได้ติดตั้งในโฟลเดอร์เว็บรูทคุณควรใช้พารามิเตอร์บางอย่างเช่นYOUR_WP_PATH/wp-login.php
เพื่อแทนที่องค์ประกอบในอาร์เรย์
ฉันได้ติดตั้งแล้วโดยใช้ WordPress ของตัวเอง wp_login_url () วิธีการดังต่อไปนี้:
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 สำหรับฉัน อาจเป็นเพราะ Buddypress หรือธีมของฉัน
ดังนั้นฉันใช้
is_page('register')
หากคุณตรวจสอบเนื้อความของหน้าการลงทะเบียนมันก็มี ID เช่นกันดังนั้นถ้ามันบอกว่า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
ซึ่งจะมีอยู่เมื่อคุณอยู่ในหน้าลงทะเบียนเท่านั้น
ต่อไปนี้เป็นคำตอบ @ T.Todua รุ่น PSR-2 ฉันเพิ่งฟอร์แมตมันอย่างดี สิ่งนี้จะดีกว่าในการปรับแต่งฟังก์ชั่นเช่นการเพิ่มตัวกรองเพื่อการทดสอบ ฯลฯ :
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;
}