The check_password WordPress PHP filter allows you to filter whether the plaintext password matches the encrypted password.
Usage
add_filter('check_password', 'your_custom_function', 10, 4); function your_custom_function($check, $password, $hash, $user_id) { // your custom code here return $check; }
Parameters
$check
(bool) – Whether the passwords match.$password
(string) – The plaintext password.$hash
(string) – The hashed password.$user_id
(string|int) – User ID. Can be empty.
More information
See WordPress Developer Resources: check_password
Examples
Add custom password validation
Add a custom password validation check that requires the first character to be an uppercase letter.
add_filter('check_password', 'custom_password_validation', 10, 4); function custom_password_validation($check, $password, $hash, $user_id) { if (ctype_upper(substr($password, 0, 1))) { return $check; } else { return false; } }
Log failed password attempts
Log failed password attempts to a file for security purposes.
add_filter('check_password', 'log_failed_password_attempts', 10, 4); function log_failed_password_attempts($check, $password, $hash, $user_id) { if (!$check) { $log = 'Failed login attempt for user ID: ' . $user_id . ' on ' . date('Y-m-d H:i:s') . "\n"; file_put_contents('failed_logins.log', $log, FILE_APPEND); } return $check; }
Disable password check for a specific user
Disable the password check for a specific user (e.g. user ID 5) for testing purposes.
add_filter('check_password', 'disable_password_check_for_user', 10, 4); function disable_password_check_for_user($check, $password, $hash, $user_id) { if ($user_id == 5) { return true; } return $check; }
Require a minimum password length
Enforce a minimum password length of 8 characters.
add_filter('check_password', 'require_min_password_length', 10, 4); function require_min_password_length($check, $password, $hash, $user_id) { if (strlen($password) >= 8) { return $check; } else { return false; } }
Add a custom password hashing algorithm
Use a custom password hashing algorithm instead of the default WordPress hashing.
add_filter('check_password', 'custom_password_hashing', 10, 4); function custom_password_hashing($check, $password, $hash, $user_id) { $custom_hash = your_custom_hash_function($password); return ($custom_hash == $hash); }