回答:
globalを使用$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
)を使用してログインページをチェックしようとすると、多くのプラグインがLOGINおよびADMIN URLを変更するため、誤った値を取得することがあります。
2)$pagenow
その場合も間違った値を与えます!
get_included_files()
(私にとっては)最も正確な解決策と思われるまれな機会です。
それを行うより現代的な方法は、プラグインによってwp-login URLが変更され、WPがサブフォルダーなどにある場合でも動作するはずです。
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
。それは私にとって少しきれいに感じます。
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を返します。たぶんバディプレスや私のテーマが原因です。
だから私は使用しました
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.';
}
?action=register
登録ページにいる場合にのみ存在するurlパラメーターを考慮します。
これは@ 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;
}