Существует ли хук перед аутентификацией пользователя?
Я ищу хук, который можно использовать до того, как WP обратится к базе данных для проверки учетных данных пользователя при входе, но не могу его найти. Существует ли такой?
Я пробовал add_filter/action('authenticate', 'customcode', 30, 3)
, но он срабатывает сразу при запросе страницы wp-login.php
, а не после отправки формы входа с логином/паролем методом POST
.
Если посмотреть код файла wp-login.php
, как в случае login
, так и в случае по умолчанию выполняется функция wp_signon()
. Похоже, причина в том, чтобы обрабатывать случаи, когда у пользователя уже есть валидная cookie для сайта. Поэтому я не думаю, что существует хук, который срабатывает только при входе, но это легко компенсировать. Первый хук на пути входа и перед аутентификацией — это хук действия wp_authenticate
, а не authenticate
(хотя последний тоже является валидным хуком).
function customcode($username, $password) {
if (!empty($username) && !empty($password)) {
// ваш код
}
}
add_action('wp_authenticate', 'customcode', 30, 2);

Ага, оказалось, что add_filter/action('authenticate', 'customcode', 30, 3)
— это именно то, что я искал...
Проблема была в том, что я установил слишком низкий приоритет, поэтому любой ответ, который создавал мой пользовательский код, перезаписывался другими фильтрами.
Таким образом, выполнив дамп global $wp_filter['authenticate']
, я увидел следующие фильтры:
20, wp_authenticate_username_password
30, wp_authenticate_cookie
99, wp_authenticate_spam_check
Изменив приоритет на 100 (или выше), я смог переопределить их и создать нужный мне ответ для обработки учетных данных, отправленных через страницу входа.

Для customcode
есть только два аргумента, поэтому должно быть add_action('authenticate', 'customcode', 30, 2)
. 3 здесь сбивает с толку.

authenticate
, я считаю, должен быть фильтром, https://codex.wordpress.org/Plugin_API/Filter_Reference/authenticate
