
WordPress のパスワードの文字数は 新規登録時では24文字自動生成していますが ユーザーはたいてい自分用のに変更していると思います。
パスワードリセット時では「ヒント:パスワードは少なくとも7文字以上であるべきです。」と表示していますが 制限がかっていませんので1文字でも登録できてしまいます。
※原文ではは「$hint = __( ‘Hint: The password should be at least twelve characters long. ・・」と12文字以上になってます。
何文字以上がセーフなのかというのは置いておいても1文字でも登録できてしまうのはまずいので パスワードの文字数制限をかけるスクリプトを用意しました。
パスワードを変更できる所は「ユーザー新規登録」「ユーザー編集」「ユーザープロフィール」「パスワードリセット」画面です。
それぞれ jQuery で画面上でチェックして 少ない場合は ボタンを押せなくするようにしました。


コード
以下のコードを my-plugin.php に張り付けてみてください。
/*
* パスワード再発行時に文字数制限を掛ける
* for wp-login.php
*
* License: GPLv2 or later
*/
function nendebcom_wp_login_password_length_check(){
//パスワード長さ指定
$pass_length = 7;
$action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : '';
if ( isset( $_GET['key'] ) ) {
$action = 'resetpass';
}
if( $action == 'rp' || $action == 'resetpass' ){
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$(function(){
var submit_btn = $('#wp-submit');
$('#pass1-text').keyup(function() {
//脆弱確認チェックボックス表示
pw_weak_class = $('.pw-weak').attr('style');
//脆弱確認チェックボックス状態
pw_weak_checkbox = $("[name=pw_weak]").prop("checked");
//パスワード文字数
pass_length = $('#pass1-text').val().length;
//文字数チェック
if( pass_length >= <?php echo $pass_length; ?> ){
if( pw_weak_checkbox == true || pw_weak_class == 'display: none;' ) {
submit_btn.removeAttr('disabled').val('パスワードをリセット');
}
if( pw_weak_checkbox == false && pw_weak_class == 'display: block;' ){
submit_btn.attr('disabled', 'disabled').val('パスワードをリセット');
}
}else{
submit_btn.attr('disabled', 'disabled').val('<?php echo $pass_length; ?>文字以上入力してください');
}
}).keyup();
$('input[name="pw_weak"]').change(function() {
//脆弱確認チェックボックス表示
pw_weak_class = $('.pw-weak').attr('style');
//脆弱確認チェックボックス状態
pw_weak_checkbox = $("[name=pw_weak]").prop("checked");
//パスワード文字数
pass_length = $('#pass1-text').val().length;
//文字数チェック
if( pass_length >= <?php echo $pass_length; ?> ){
if( pw_weak_checkbox == true || pw_weak_class == 'display: none;'){
submit_btn.removeAttr('disabled').val('パスワードをリセット');
}
if( pw_weak_checkbox == false && pw_weak_class == 'display: block;' ){
submit_btn.attr('disabled', 'disabled').val('パスワードをリセット');
}
}else{
submit_btn.attr('disabled', 'disabled').val('<?php echo $pass_length; ?>文字以上入力してください');
}
});
});
});
</script>
<?php
}
}
add_action('login_footer', 'nendebcom_wp_login_password_length_check');
/**
* パスワードヒント 変更
*
* @since 4.1.0
* apply_filters( 'password_hint', $hint );
* @param string $hint The password hint text.
*
* License: GPLv2 or later
*/
function nendebcom_password_hint_word( $hint ) {
//パスワード長さ指定
$pass_length = 7;
$hint = 'ヒント: パスワードは' . $pass_length . '文字以上にしてください。より強固にするためには大文字と小文字、数字、 ! " ? $ % ^ & ) のような記号を使いましょう。';
return $hint;
}
add_filter( 'password_hint', 'nendebcom_password_hint_word' );
/*
* ユーザー新規・編集 パスワード長さチェック
* for user-new.php profile.php user-edit.php
*
* License: GPLv2 or later
*/
function nendebcom_profile_password_length_check(){
global $hook_suffix;
//パスワード長さ指定
$pass_length = 7;
if( !$hook_suffix )
return;
//新規
if( $hook_suffix == 'user-new.php' ){
$submit_btn_id = '#createusersub';
$submit_btn_txt = '新規ユーザーを追加';
}
//プロフィール・ユーザーを編集
if( $hook_suffix == 'profile.php' || $hook_suffix == 'user-edit.php' ){
$submit_btn_id = '#submit';
$submit_btn_txt = 'ユーザーを更新';
}
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$(function(){
var submit_btn = $('<?php echo $submit_btn_id;?>');
$('#pass1-text').keyup(function() {
//脆弱確認チェックボックス表示
pw_weak_class = $('.pw-weak').attr('style');
//脆弱確認チェックボックス状態
pw_weak_checkbox = $("[name=pw_weak]").prop("checked");
//パスワード設定 アクティブ
pass_wp_pwd = $('.wp-pwd').attr('style');
//パスワード文字数
pass_length = $('#pass1-text').val().length;
//文字数チェック
if( pass_length >= <?php echo $pass_length; ?> ){
if( pw_weak_checkbox == true || pw_weak_class == 'display: none;' ) {
submit_btn.removeAttr('disabled').val('<?php echo $submit_btn_txt;?>');
}else{
submit_btn.val('<?php echo $submit_btn_txt;?>');
}
if( pw_weak_checkbox == false && pw_weak_class == 'display: block;' ){
submit_btn.attr('disabled', 'disabled').val('<?php echo $submit_btn_txt;?>');
}else{
submit_btn.val('<?php echo $submit_btn_txt;?>');
}
}else{
if( pass_wp_pwd != 'display: none;' ){
submit_btn.attr('disabled', 'disabled').val('<?php echo $pass_length; ?>文字以上入力してください');
}
}
}).keyup();
$('input[name="pw_weak"]').change(function() {
//脆弱確認チェックボックス表示
pw_weak_class = $('.pw-weak').attr('style');
//脆弱確認チェックボックス状態
pw_weak_checkbox = $("[name=pw_weak]").prop("checked");
//文字数チェック
if($('#pass1-text' ).val().length >= <?php echo $pass_length; ?>){
if( pw_weak_checkbox == true || pw_weak_class == 'display: none;'){
submit_btn.removeAttr('disabled').val('<?php echo $submit_btn_txt;?>');
}
if( pw_weak_checkbox == false && pw_weak_class == 'display: block;' ){
submit_btn.attr('disabled', 'disabled').val('<?php echo $submit_btn_txt;?>');
}
}else{
submit_btn.attr('disabled', 'disabled').val('<?php echo $pass_length; ?>文字以上入力してください');
}
});
});
});
</script>
<?php
}
add_action( 'admin_footer-user-new.php', 'nendebcom_profile_password_length_check' );
add_action( 'admin_footer-profile.php', 'nendebcom_profile_password_length_check' );
add_action( 'admin_footer-user-edit.php', 'nendebcom_profile_password_length_check' );
※制限文字数を変えたい場合は「//パスワード長さ指定」のところを変更してください。(3か所あります)
参考
login_footer | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/login_footer/
password_hint | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/password_hint/
admin_footer-{$hook_suffix} | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/admin_footer-hook_suffix/