Intereting Posts
Использование $ wpdb-> get_results с помощью Select и сравнение столбца с переменной update_post_meta не работает в save_post Неверный URL-адрес в сортируемых заголовках столбцов и разбиении на страницы в администраторе, когда за прокси-сервером Как исправить ошибку тайм-аута и ошибку ajax Сообщение Ответить с цитатой Как вернуть пустую страницу Установка wordpress в качестве сайта разработки в подкаталоге на реальном сервере Переименование загружает имена файлов в POST-ID при загрузке Та же БД для живых версий и версий dev Как включить этот файл jQuery в wordpress? URL-адрес перенаправления и массовые действия в wp_list_table add_menu_page Функция обратного вызова: пропускает содержимое страницы? Передача переменной из jQuery в PHP Как предотвратить удаление комментариев при удалении сообщения Я использую add_meta_box (), но хочу включить TinyMCE editor * и * Media Uploads для каждого окна

Умышленное принудительное сбой Вход в систему WordPress

Я пытаюсь заставить функцию входа в WordPress сбой при определенных условиях. В принципе, у нас есть ситуация, когда у нас есть пользователи, которые позволили своим аккаунтам истекать в нашей среде членства. Идея состоит в том, что если они попытаются войти в систему, это просто не удастся выполнить их регистрацию, потому что они не смогут получить доступ к чему-либо, так что я полагаю, что мы просто даем им знать с помощью пользовательского сообщения login_errors .

Проблема заключается в том, что пользователь должен иметь ошибку входа в систему, чтобы это произошло (что означает, что они должны использовать неправильную комбинацию имени пользователя и пароля). В этом случае они все равно будут иметь логины, но у них просто нет действительного членства для взаимодействия с контентом на сайте.

Я перехватываю процесс, используя крюк wp_authenticate и я могу успешно захватить информацию из входа пользователя, но я не могу заставить его выбросить ошибку. Если я return false или return new WP_Error() он не сработает. Если я изменю учетные данные в потоке, это тоже не имеет значения.

Любые идеи о том, как заставить его не входить в систему и перенаправлять на страницу входа с новым сообщением об ошибке?

Долгое время с тех пор, как я последний раз делал это на сайте, но это суть.

Вы хотите подключиться к wp_authenticate_user который будет срабатывать после wp_authenticate_user WP попытаться аутентифицировать пользователя, но до входа пользователя в систему.

Вы получите либо объект WP_User либо объект WP_Error и вы должны вернуть объект WP_User (если ваша проверка подлинности WP_Error успешно) или объект WP_Error (если ваш аут не работает). Что-то вроде этого должно работать:

 function wpse_232915_authenticate_user( $user ) { /* already failed login attempt return existing error or you'll subvert the login process: */ if ( is_wp_error( $user ) ) { return $user; } $failure = your_own_authentication_tests( $user->ID ); // test if the user should be allowed in by your own rules if ( $failure ) { return new WP_Error( 'wpse_232915_user_expired', 'Sorry, you have expired!' ); } return $user; } add_filter( 'wp_authenticate_user', 'wpse_232915_authenticate_user' ); 

В зависимости от того, насколько сложным является ваш тест, вы можете вернуть объект WP_Error из этой функции, а не true / false, как я предполагал здесь.

Мне не достаточно удобно с WP_Error, чтобы узнать, можете ли вы связать ошибки, или будет ли поле с уведомлением об ошибке входа в систему с удовольствием, но это улучшение, о котором стоит подумать.