テンプレートページに「ログインエラー」と「パスワードの紛失」を表示するにはどうすればよいですか?


10

関数wp_login_formを使用して、テンプレートでフロントエンドログインを提供しています。ログインとログアウト後のリダイレクトをきれいに処理します!ただし、ユーザー名/パスワードが一致しない場合、または存在しない場合、ユーザーは不安定なjsエラーで管理者ログインページにリダイレクトされます。また、パスワードをリセットしようとする場合も同様です。パスワードをリセットするためのメールを入力する必要があるmeバックエンドページに移動します。これらの両方のアクティビティをテンプレートに表示したいと思います。これを行う方法はありますか?

事前に助けをありがとう。

回答:


9

はい、可能です。これには3つのフィルターを作成する必要があります。

クラス内の管理スタッフ

class WPSE29338_Admin {
    public static function setup() {
        add_filter('login_url', array(__CLASS__, 'modifyLoginURL'), 10, 2);
        add_filter('lostpassword_url', array(__CLASS__, 'modifyLostPasswordURL'), 10, 2);
        add_filter('register', array(__CLASS__, 'modifyRegisterURL'));
    }

    public static function modifyLoginURL($loginUrl, $redirect = '') {
        $loginUrl = site_url('login'); // Link to login URL

        if(!empty($redirect)) {
            $loginUrl = add_query_arg('redirect_to', urlencode($redirect), $loginUrl);
        }

        return $loginUrl;
    }

    public static function modifyLostPasswordURL($lostpwUrl, $redirect = '') {
        $lostpwUrl = wp_login_url() . '#lostpassword'; // Link to lostpassword URL

        if(!empty($redirect)) {
            $lostpwUrl = add_query_arg('redirect_to', urlencode($redirect), $lostpwUrl);
        }

        return $lostpwUrl;
    }

    public static function modifyRegisterURL($registerUrl) {
        if(!is_user_logged_in()) {
            if (get_option('users_can_register')) {
                $registerUrl = '<a href="' . wp_login_url() . '#register" class="btn">' . __('Register') . '</a>'; // Link to register URL
            } else {
                $registerUrl = '';
            }
        }

        return $registerUrl;
    }
}

最初に、forms 属性でwp_login_url()使用される関数の出力をフィルタリングする必要があります。wp_login_form()action

メソッドを見てくださいmodifyLoginUrl()。ここでは、ページのURLをlogin変数に格納しています$loginUrl。このページはWordPress内に存在する必要があるため、最初に作成します。

次に、関数wp_lostpassword_url()とのフィルターが必要wp_register()です。基本的には同じです。サイトのURLは変数$lostpwUrlandに格納されます$registerUrl

最後に重要なことですが、適切なアクションフックでクラスを呼び出す必要があります。これはテーマでafter_setup_themeあり、プラグインでは使用できますplugins_loaded

テーマ/functions.php

add_action('after_setup_theme', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}

プラグイン

add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}

これをぶつけて申し訳ありませんが、これをやりたいと思っていますが、理解できないようです。あなたが提供したコードで、私は何を変更すべきですか?
Bram Vanroy、2012年

ブラム、カスタムテーマを作成する場合は、コードの最初と2番目のブロックをすべてテーマ関数ファイルに配置します。プラグインを作成する場合は、コードの最初と3番目のブロックをプラグインファイルに入れます。変更する必要があるのはクラスの9行目だけです$loginUrl = site_url('login'); // Link to login URL。使用するログインページのスラッグに合わせて「ログイン」を変更するだけです。Roffloxが私が見ない構文エラーを作らない限り、これは美しく機能するように見えます。
Jen

@guiniveretooご返信ありがとうございます!問題は、ウェブサイトのどのページからでもアクセスできるドロップダウンフォームを使用していることです。だから、誰もがどのページからでもログインできるので、確実なスラッグはあり得ません...それで、何をそこに置くべきですか?
Bram Vanroy、

1
Bram-WordpressはログインURLを必要とするため、ユーザーエラーなどが発生した場合、ユーザーがどこかに行ってパスワードをリセットしたり、アカウントにサインアップしたりできます。ログインURLを設定すると、そのページが表示されます。私は去年のプロジェクトでまさにこのセットアップを行いました。ログインフォームに表示されるJavaScriptログインボックス-彼らが情報を正しく入力すると、wp-adminに送信されます。そうでない場合は、カスタムログインページに戻って、再試行するか、パスワードをリセットします。
Jen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.