Отправить регистрационное письмо всем администраторам.

Вопрос или проблема

Я пытаюсь отправить кастомное письмо всем администраторам при регистрации пользователя. У меня есть следующий код, но он отправляется только на адрес, указанный в Административном Электронном Адресе. Мне нужно, чтобы он отправлялся всем администраторам.

add_filter('wp_new_user_notification_email_admin', 'cmc_custom_user_reg_admin_email', 10, 3);
function cmc_custom_user_reg_admin_email($wp_new_user_notification_email, $user, $blogname) {
    $id = $user->ID;
    $name = $user->first_name . " " . $user->last_name;
    $username = $user->nickname;
    $newmail = "
        <p><b>Имя:</b> $name</p>
        <p><b>Логин:</b> $username</p>
        <p><a href="https://intranet/departments/residency/index.php/confirm-email/?id=$id">Нажмите здесь, чтобы подтвердить регистрацию.</a></p>
    ";

    // Установить сообщение, тему и заголовки для письма
    $wp_new_user_notification_email['message'] = $newmail;
    $wp_new_user_notification_email['subject'] = "Регистрация на сайте Family Medicine Residency";
    $wp_new_user_notification_email['headers'] = 'Content-Type: text/html; charset=UTF-8';

    //error_log("Письмо успешно отправлено пользователю, чей электронный адрес " . $user_email);

    return $wp_new_user_notification_email;

}

Лучше попробовать что-то вроде этого:

add_action( 'register_new_user', 'send_admin_registration_email', 99, 1 );
function send_admin_registration_email( $user_id ) {
    $user_info   = get_userdata( $user_id );
    $first_name  = $user_info->first_name;
    $last_name   = $user_info->last_name;
    $user_login  = $user_info->user_login;

    $subject="Регистрация на сайте Family Medicine Residency";
    
    $message="<p><b>Имя:</b> " . esc_html( $first_name ) . ' ' . esc_html( $last_name ) . '</p>';
    $message .= '<p><b>Логин:</b> ' . esc_html( $user_login ) . '</p>';
    $message .= '<p><a href="https://intranet/departments/residency/index.php/confirm-email/?id=' . esc_attr( $user_id ) . '">Нажмите здесь, чтобы подтвердить регистрацию.</a></p>';
    
    $admins     = get_users( array('role' => 'administrator') );
    $admin_emails = wp_list_pluck( $admins, 'user_email' );
    
    if ( ! empty( $admin_emails ) ) {
        wp_mail( $admin_emails, $subject, $message, array('Content-Type: text/html; charset=UTF-8') );
    }
}

.

Ответ или решение

Отправка регистрационного уведомления всем администраторам при регистрации нового пользователя на веб-сайте является распространенной задачей, особенно в корпоративных или образовательных системах. Рассмотрим, как достичь этой цели, используя элементы кода, предоставленные в описании задачи, и сохраняем фокус на WordPress, так как именно эта платформа, судя по коду, используется для реализации.

Теория

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

Пример

В предоставленном коде вы используете фильтр wp_new_user_notification_email_admin, который изменяет стандартное письмо о регистрации. Однако, этот фильтр ограничен тем, что он подразумевает отправку только на один адрес, заданный в настройках. Напротив, классическая цель в данном случае — отправка уникальных уведомлений сразу всем пользователям с ролью администратора. Рассмотрим, как решить этот вопрос на примере функции send_admin_registration_email.

add_action('register_new_user', 'send_admin_registration_email', 99, 1);
function send_admin_registration_email($user_id) {
    // Получаем данные нового пользователя
    $user_info = get_userdata($user_id);
    $first_name = $user_info->first_name;
    $last_name = $user_info->last_name;
    $user_login = $user_info->user_login;

    // Формулируем заголовок и текст сообщения
    $subject = "Family Medicine Residency Site Registration";
    $message = "<p><b>Name:</b> " . esc_html($first_name) . ' ' . esc_html($last_name) . '</p>';
    $message .= '<p><b>Username:</b> ' . esc_html($user_login) . '</p>';
    $message .= '<p><a href="https://intranet/departments/residency/index.php/confirm-email/?id=' . esc_attr($user_id) . '">Click Here to confirm the registration.</a></p>';

    // Получаем всех пользователей с ролью "администратор" и их email
    $admins = get_users(array('role' => 'administrator'));
    $admin_emails = wp_list_pluck($admins, 'user_email');

    // Отправляем email всем администраторам
    if (!empty($admin_emails)) {
        wp_mail($admin_emails, $subject, $message, array('Content-Type: text/html; charset=UTF-8'));
    }
}

Применение

Теперь, когда мы установили принцип работы, объясним, как данный код применяется на практике.

  1. Инициализация: Используйте хук register_new_user, который запускается в момент регистрации нового пользователя. Этот хук передает ID нового пользователя в указанную функцию. send_admin_registration_email — это функция, в которой будет происходить вся логика.

  2. Получение информации о пользователе: С помощью функции get_userdata(), вы извлекаете данные нового пользователя. Это позволит обеспечить персонализированное письмо каждому администратору с указанием имени и имени пользователя (логина) нового члена.

  3. Формирование содержимого письма: Используя HTML, вы можете создавать более привлекательные и легко читаемые письма. Функции esc_html() и esc_attr() обеспечивают безопасность введенных пользователем данных, предотвращая потенциальные атаки, например, через внедрение скриптов.

  4. Сбор адресов электронных почт всех администраторов: Функция get_users() помогает извлечь список всех пользователей с определенной ролью, в нашем случае — администратора. Функция wp_list_pluck() затем собирает адреса email этих пользователей, готовя их к массовой рассылке писем.

  5. Отправка письма: Наконец, функция wp_mail() отправляет письма, создавая массив email-адресов в качестве цели. Это гарантирует, что каждый администратор получит уведомление о новом зарегистрированном пользователе.

Заключение

Быть информированным о регистрациях новых пользователей — это жизненно важно для администраторов, чтобы сохранить контроль и предоставить необходимую поддержку новым участникам. Используя WordPress, приведенное решение позволяет автоматически уведомлять всех администраторов, улучшая связь и координацию внутри вашей системы. Надеюсь, это детальное объяснение окажется полезным и применимым в вашей конкретной ситуации.

Оцените материал
Добавить комментарий

Капча загружается...