私はphpの初心者なので、これに関する助けが必要です。私と一緒に耐えてください。
訪問者が「ユーザー専用/ログイン」ページからリダイレクトされたときに、wp_login.phpページにエラーメッセージを含めたいです。以下は、私が「ユーザーのみ」に使用するページテンプレート用のコードです。ユーザーがログインしているかどうかを確認します。そうでない場合は、ログインページにリダイレクトされます。これは私が立ち往生するところです。私はグーグルで見つけたいくつかのコードを一緒にしようとしたが運が悪い。ここからログインページにエラーメッセージを渡す方法はありますか?
if (!is_user_logged_in()) { auth_redirect(); }
add_action('login_head','ref_access');
function ref_access() {
global $error;
if( !empty($_GET['ref']) && 'access' == $_GET['ref'] )
$error = 'Restricted area, please login to continue.';}
どんなコード提案でも評価されるでしょう。
ここで重要なのは、テンプレートファイルにすべてのコードを保持しているため、テンプレートファイルの一部が実行されなくなることです。ログインしないでテンプレートをロードするとauth_redirect()
が実行されます。この関数はページのロードを停止してログインページにリダイレクトするため、login_head
コールバックは呼び出されません。このようにコードを分割してみてください。
your-template.php
if (!is_user_logged_in()) {
auth_redirect();
}
functions.php
add_action('login_head','ref_access');
function ref_access() {
global $error;
if( !empty($_GET['ref']) && 'access' == $_GET['ref'] )
$error = 'Restricted area, please login to continue.';
}
これによりref_access
がlogin_head
上で実行されますが、ログインページが表示されるたびに実行されることも意味します。これを説明するには、auth_redirect()
がいつ、どこから呼び出されているのかをWordPressに記録させ、ref_access()
に何らかの参照元をチェックさせる方法を見つける必要があります。最初に頭に浮かぶのは、 セッション を使用して、進行中の各リダイレクトに関する情報を格納し、必要に応じてセッションデータをref_access()
または新しいページロードごとに消去することです。 。
別の方法として、ログインページにメッセージを表示するためのlogin_message
フィルタの使用がありますが、リダイレクトや参照元の問題も同様に当てはまります。これが例です:
add_filter('login_message', 'wpse_87333_login_message');
function wpse_87333_login_message($messages) {
$messages = 'Restricted area, please login to continue.';
}