Theme My Loginバージョン6.3.9のソースを眺めてみたところ、新規登録時のバリデーションはフィルターregistration_errorsにプラグインの関数password_errorsを登録して実行させていました。(プラグインのファイルmodules/custom-passwords/custom-passwords.phpの中にあります。)
そこで、パスワードリセットの時もフィルター(またはアクション)を登録しているだろうと思って探してみましたが、見た限りでは、無さそうです。WordPress本体について詳しくないのですが、アクションvalidate_password_resetがこの用途みたいです。
Home
ghvstさん、返信ありがとうございます。
素人ながら↓のような感じでfunction.phpに書いたのですが、うんともすんとも・・です。
// パスワードリセットバリデーション
function tml_validate_password_reset( $errors ) {
if ( empty( $errors ) )
$errors = new WP_Error();
if ( empty( $_POST['pass1'] ) || empty( $_POST['pass2'] ) ) {
$errors->add( 'empty_password', __( '<strong>エラー</strong>: 「パスワード」と「パスワード確認」を入力してください。' ) );
} elseif ( false !== strpos( stripslashes( $_POST['pass1'] ), "\\" ) ) {
$errors->add( 'password_backslash', __( '<strong>エラー</strong>: パスワードには文字 "\ \"を含めることはできません。' ) );
} elseif ( $_POST['pass1'] != $_POST['pass2'] ) {
$errors->add( 'password_mismatch', __( '<strong>エラー</strong>: パスワードとパスワード確認が一致していません。' ) );
} elseif ( strlen( $_POST['pass1'] ) < 8 ) {
$errors->add( 'password_length', __( '<strong>エラー</strong>: パスワードは8文字以上にしてください。', 'theme-my-login' ) );
} else {
$_POST['user_pass'] = $_POST['pass1'];
}
return $errors;
}
add_filter( 'validate_password_reset', 'tml_validate_password_reset' );
kokoenさん、validate_password_resetはフィルターではなくてアクションですから、add_filterの代わりにadd_actionを使って登録します。
関数リファレンス/add action
作成なさった関数tml_validate_password_resetの中身は、そもそもどんなコードがよいか私も判らないのでうまくコメントできないですが、一般的にアクションをどのように書けばよいかは下記のリンク先が参考になると思います。
関数リファレンス/do action
(validate_password_resetを実行してくれるのはWordPress本体のwp-login.phpの中から。)
WP3.5から加わった比較的新しい関数のようで、実装例がほとんど無かったので参りました。
わたしには敷居が高すぎたようです・・・
ひとまずjQueryで対処することにしました。
class-theme-my-login.phpに処理が書いてありました。
完全に見落としてました。
ここに上記処理の中身を加えたらうまくいきました。
返信くださったghvstさん、どうも有難うございました。
kokoenさん、うまくいって良かったです。
アクションvalidate_password_resetのフックとは関係なく、プラグインの中にパスワードリセット時のチェック処理が用意されていたんですね。遠回りをさせてしまったようで申し訳ありませんでした。