現在のページがwp-login.php
またはwp-signup.php
であるかどうかどうすれば確認できますか?
$_SERVER['REQUEST_URI']
を使用するよりもエレガントな解決策はありますか?
実行時にWordPressによって設定される共通のグローバルであるグローバル$pagenow
を使用してください。
if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
// We're on the login page!
}
登録ページの type を確認することもできます。
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 urlsを変更するため、誤った値になることがあります。
2)$pagenow
はその場合も間違った値を与えるでしょう!
$GLOBALS['pagenow']
は機能しません。$_SERVER['PHP_SELF']
を使用してください。
if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
// do something.
}
もしあなたのワードプレスがWebのルートフォルダにインストールされていなければ、YOUR_WP_PATH/wp-login.php
のようないくつかのパラメータを使って配列の要素を置き換えるべきです。
それをするためのもっと現代的な方法は、wp-login URLがプラグインによって変更されたときやWPがサブフォルダの中にあるときなどにもうまくいくはずです。
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
ここで提案されているいくつかの解決策がうまくいったので、私は普通のWordPressサイトで動作する本当に簡単なものを手に入れました(Multisiteではテストされていません)。
単純な:
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
それはあなたが登録ページにいるときだけ存在するurlパラメータ?action=register
を考慮に入れます。
私は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の使用について絶対に確信が持てないため)十分です。ただし、デフォルトのログインフォームを変更するプラグインまたはテーマ開発者が行ったはずです。そう正しい方法...
これが@ 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;
}
ログインページではなく、登録ページにのみ興味があります。だからこれは誰もが望んでいるわけではないかもしれません。
$ GLOBALS ['pagenow']は私にはindex.phpを返します。たぶん、私のテーマや私のテーマのためです。
だから私は使った
is_page('register')
あなたが登録ページの本体を調べるならば、それは同様にIDを持っています、それでそれが page-id-4906 と言うなら、あなたはそれがよりうまく機能するならあなたはそれをこのように使うことができます:
is_page('4906')