Wordpress Core
Ваша проблема связана с тем, что фильтруемая переменная $user
уже WP_Error
, а не WP_User
, поэтому ваш фильтр не может работать, поскольку $user->user_email
null
, надеюсь, Wordpress использует другой промежуточный хук в своей функции входа в систему
Вместо этого вы должны использовать этот фильтр wp_authenticate_user
, который сработает после извлечения пользователя из базы данных, но до того, как пароль будет проверил, преобразовав пользователя в WP_Error
function check_login($user) {
if ($user instanceof WP_User) {
if (substr($user->user_email, -12) == "@company.com") {
$user = new WP_Error( 'authentication_failed', __( '<strong>ERROR</strong>: Please login using Google.' ) );
}
}
return $user;
}
add_filter('wp_authenticate_user', 'check_login', 9, 1);
Сторонний плагин
Если вы используете плагин безопасности, у них обычно есть опция, которая отключает сообщения об ошибках входа в систему, вот как это отключить в некоторых из них
IThemes Security
Один из вариантов, который предоставляет этот плагин, - скрывать все сообщения об ошибках входа в систему. Вы можете отключить это в настройках плагина> Настройки Wordpress> Снять отметки с сообщений об ошибках входа
Или перейдите на эту страницу, добавив этот URL на свой веб-сайт /wp-admin/admin.php?page=itsec&module=wordpress-tweaks&module_type=recommended
Wordfence
Этот плагин выдает пользователю общее сообщение об ошибке c, чтобы предотвратить выявление неправильного пароля или имени пользователя. Вы можете отключить эту опцию там