web-dev-qa-db-ja.com

ログイン時にエラーメッセージを含める方法

私は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.';}

どんなコード提案でも評価されるでしょう。

1
user27636

ここで重要なのは、テンプレートファイルにすべてのコードを保持しているため、テンプレートファイルの一部が実行されなくなることです。ログインしないでテンプレートをロードすると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_accesslogin_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.';
}
1
Simon