Хук wp_login
срабатывает каждый раз, когда пользователь успешно авторизуется на сайте WordPress. Это может быть полезно для выполнения различных действий при входе пользователя, таких как отправка уведомлений, запись метаданных или проверка определенных условий.
do_action( 'wp_login', string $user_login, WP_User $user );
Параметры
$user_login
(string): Имя пользователя (логин).$user
(WP_User): ОбъектWP_User
текущего пользователя, который вошел в систему.
Особенности
Хук wp_login
вызывается функцией wp_signon()
после выполнения функции wp_set_auth_cookie()
, которая устанавливает аутентификационные куки для пользователя. Хук предоставляет доступ к информации о пользователе, включая его имя и объект WP_User
, что делает его полезным для различных действий, требующих авторизации.
Пример 1: Запись времени последнего входа пользователя
Этот пример демонстрирует, как записывать время последнего входа пользователя в метаполе профиля. Это может быть полезно для аналитики или отслеживания активности пользователей.
add_action( 'wp_login', 'record_last_login_time', 10, 2 );
function record_last_login_time( $user_login, $user ) {
update_user_meta( $user->ID, 'last_login_time', current_time( 'mysql' ) );
}
Пример 2: Ограничение входа только для определенной роли
Допустим, вы хотите ограничить вход для пользователей с определенной ролью, например, только для администраторов. Если пользователь с другой ролью пытается войти, его перенаправляют на страницу с сообщением об ошибке.
add_action( 'wp_login', 'restrict_login_to_admins', 10, 2 );
function restrict_login_to_admins( $user_login, $user ) {
if ( ! in_array( 'administrator', $user->roles ) ) {
wp_logout();
wp_redirect( home_url( '/access-denied/' ) );
exit;
}
}
Пример 3: Отправка уведомления администратору при входе определенного пользователя
Этот пример отправляет письмо администратору сайта, когда определенный пользователь (например, с логином special_user
) входит в систему. Это может быть полезно для мониторинга активности ключевых пользователей.
add_action( 'wp_login', 'notify_admin_on_special_user_login', 10, 2 );
function notify_admin_on_special_user_login( $user_login, $user ) {
if ( $user_login === 'special_user' ) {
$admin_email = get_option( 'admin_email' );
$subject = 'Пользователь special_user вошел на сайт';
$message = "Пользователь $user_login только что вошел в систему.";
wp_mail( $admin_email, $subject, $message );
}
}
Пример 4: Счетчик количества входов для пользователя
С помощью этого примера можно отслеживать количество входов каждого пользователя. Счетчик обновляется при каждом успешном входе.
add_action( 'wp_login', 'update_user_login_count', 10, 2 );
function update_user_login_count( $user_login, $user ) {
$login_count = get_user_meta( $user->ID, 'login_count', true );
$login_count = $login_count ? $login_count + 1 : 1;
update_user_meta( $user->ID, 'login_count', $login_count );
}
Пример 5: Установка приветственного сообщения при первом входе
Этот код устанавливает приветственное сообщение для нового пользователя, которое будет отображаться только при первом входе, а затем удаляется, чтобы не показываться повторно.
add_action( 'wp_login', 'set_welcome_message', 10, 2 );
function set_welcome_message( $user_login, $user ) {
if ( ! get_user_meta( $user->ID, 'has_logged_in_once', true ) ) {
update_user_meta( $user->ID, 'welcome_message', 'Добро пожаловать на наш сайт!' );
update_user_meta( $user->ID, 'has_logged_in_once', true );
}
}
Пример 6: Перенаправление пользователя на персонализированную страницу после входа
В этом примере пользователь после входа автоматически перенаправляется на страницу своего профиля. Это может быть полезно для сайтов с индивидуальными профилями пользователей.
add_action( 'wp_login', 'redirect_user_to_profile', 10, 2 );
function redirect_user_to_profile( $user_login, $user ) {
wp_redirect( home_url( '/user-profile/' . $user->ID ) );
exit;
}
Пример 7: Логирование информации о входе для безопасности
Этот код записывает информацию о каждом входе пользователя, включая IP-адрес, дату и время. Это может быть полезно для анализа безопасности и отслеживания подозрительных действий.
add_action( 'wp_login', 'log_user_login_info', 10, 2 );
function log_user_login_info( $user_login, $user ) {
$login_info = sprintf(
"Пользователь: %s \nID: %d \nIP: %s \nДата: %s\n\n",
$user_login,
$user->ID,
$_SERVER['REMOTE_ADDR'],
current_time( 'mysql' )
);
file_put_contents( WP_CONTENT_DIR . '/user_logins.log', $login_info, FILE_APPEND );
}
Заключение
Хук wp_login
в WordPress предоставляет множество возможностей для настройки и мониторинга процесса входа на сайт.