web-dev-qa-db-ja.com

登録が失敗したときにカスタムURLにリダイレクトしますか?

登録が成功した後にユーザーをリダイレクトしたいときは、 "registration_redirect"フィルターフックを使います。登録が失敗したときはどうですか、どのフィルタフックを使用すればよいですか? wp-login.phpを調べましたが、使用できるフィルタ/アクションフックが見つかりませんでした。これについてはどうすればいいですか。

3
jilseego

あなたはhtaccessリダイレクトを追加するか、テーマ私のログインプラグインを試してみることができます: http://wordpress.org/extend/plugins/theme-my-login/ 。カスタムリダイレクトのオプションがあります。

1
Innate

Htaccessやpluginの代わりにもっと洗練された解決策があります。このトピックに興味がある人のために、失敗した再試行の試みの直後(直前)にリダイレクトする私のコードがあります。

何故前?登録を試みる前に、WordPressはユーザー名とEメールアドレス、それらが空でないかどうか、それらが既にDBにないかどうか、そしてEメールとユーザー名が正しいかどうかをチェックします。もしそうなら、それはエラーを報告し、あなたはこのチェックの直後に関数にフックすることができます。

do_action( 'register_post', $sanitized_user_login, $user_email, $errors );

次のステップ - フックできない - は新しいユーザーを作成する試みです。これが失敗した場合、別のエラーメッセージがあり、あなたは標準的なwp_login.phpスクリーンにリダイレクトされるでしょう。

しかし、あります。このプロセス、次のステップは、wp_insert_user()を呼び出すだけで、この関数はempty_user_login、existing_user_login、existing_user_emailでのみ失敗します。そうでなければ正常に終了します。そしてあなたが注意深く読んだならば、この関数が呼ばれる前にこれらすべての変数がチェックされます(あなたのプラグインから直接wp_insert_userを呼び出すことができるのでこの二重チェックは論理的です)。

したがって、前述のフックの後に登録プロセスが失敗した場合、WordPressのインストールに問題があるため失敗します。したがって、登録プロセスにフックされたリダイレクト機能が失敗するわけではありません。

そして最後に、ログインが失敗した後にカスタムページにリダイレクトするためのコードをコピーして貼り付けるだけのコードがあります。

add_action('register_post', 'binda_register_fail_redirect', 99, 3);

function binda_register_fail_redirect( $sanitized_user_login, $user_email, $errors ){
    //this line is copied from register_new_user function of wp-login.php
    $errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );
    //this if check is copied from register_new_user function of wp-login.php
    if ( $errors->get_error_code() ){
        //setup your custom URL for redirection
        $redirect_url = get_bloginfo('url') . '/registrace';
        //add error codes to custom redirection URL one by one
        foreach ( $errors->errors as $e => $m ){
            $redirect_url = add_query_arg( $e, '1', $redirect_url );    
        }
        //add finally, redirect to your custom page with all errors in attributes
        wp_redirect( $redirect_url );
        exit;   
    }
}
8
david.binda