Пользовательское приветственное письмо | WordPress

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

Я хочу заменить следующее сообщение при создании пользователя в панели управления в качестве администратора:

Имя пользователя: xxx

Чтобы установить ваш пароль, посетите следующий адрес:

https://development.xxx.com/wp-login.php?action=rp&key=FlFdsDeAveg2EN1HuqGB0G&login=xxx%40gmail.com

https://development.xxx.com/wp-login.php

Это моя неработающая функция:

/**
 * Пользовательское приветственное письмо
 * @author Archie M
 *
 */

add_filter( 'wpmu_signup_user_notification_subject', 'my_activation_subject', 10, 4 );

function my_activation_subject( $text ) {

    return 'Добро пожаловать в xxx! (Требуется активация)';
}

add_filter('wpmu_signup_user_notification_email', 'my_custom_email_message', 10, 4);

function my_custom_email_message($message, $user, $user_email, $key) {

//Вот новое сообщение:

    $message = sprintf(__('Привет %s'), $user->display_name) . "\r\n\r\n";
    $message .= __('Ваша регистрация на xxx была одобрена.') . "\r\n\r\n";
    $message .= __('Чтобы установить ваш пароль, посетите следующий адрес:') . "\r\n\r\n";
    $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";

    return sprintf($message);

}

Где именно я упускаю суть?

Удивительно. Я переписал половину стандартной функции, чтобы достичь того, чего хотел. Я довольно уверен, что решение существует:

add_filter( 'wp_new_user_notification_email' , 'edit_user_notification_email', 10, 3 );

function edit_user_notification_email( $wp_new_user_notification_email, $user, $user_email ) {

    global $wpdb, $wp_hasher;

    $key = wp_generate_password( 20, false );

    /** Это действие задокументировано в wp-login.php */
    do_action( 'retrieve_password_key', $user->user_login, $key );

    // Теперь вставьте ключ, закодированный, в БД.
    if ( empty( $wp_hasher ) ) {
        require_once ABSPATH . WPINC . '/class-phpass.php';
        $wp_hasher = new PasswordHash( 8, true );
    }
    $hashed = time() . ':' . $wp_hasher->HashPassword( $key );
    $wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );

    $switched_locale = switch_to_locale( get_user_locale( $user ) );

    // отправить сообщение
    $message = sprintf(__('Привет %s'), $user->display_name) . "\r\n\r\n";
    $message .= __('Ваша регистрация на xxx.com была одобрена.') . "\r\n\r\n";
    $message .= __('Чтобы установить ваш пароль, посетите следующий адрес:') . "\r\n\r\n";
    $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";

    $wp_new_user_notification_email['message'] = $message;

    return $wp_new_user_notification_email;

}

Вы можете расширить $wp_new_user_notification_email следующим образом:

$wp_new_user_notification_email = array(
        'to'      => $user->user_email,
        /* переводчики: Тема уведомления об изменении пароля. %s: Заголовок сайта */
        'subject' => __( '[%s] Ваша информация о имени пользователя и пароле' ),
        'message' => $message,
        'headers' => '',
    );

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

Кастомизированное Приветственное Письмо в WordPress

Если вы хотите изменить стандартное приветственное письмо для новых пользователей в панели управления WordPress, вы на правильном пути. Понимание хука wp_new_user_notification_email и правильная реализация функции помогут вам создать уникальное приветственное сообщение для ваших пользователей.

Проблема

Вы уже попробовали использовать хук wpmu_signup_user_notification_email, но столкнулись с трудностями в его реализации. Тем не менее, у вас есть пример, который работает с хуком wp_new_user_notification_email, и это более подходящий метод для отправки уведомлений о создании пользователя.

Решение

Используйте следующий код, чтобы создать кастомное приветственное письмо для новых пользователей:

add_filter('wp_new_user_notification_email', 'edit_user_notification_email', 10, 3);

function edit_user_notification_email($wp_new_user_notification_email, $user, $user_email) {
    global $wpdb, $wp_hasher;

    // Генерируем уникальный ключ
    $key = wp_generate_password(20, false);

    // Добавляем действие, чтобы создать ключ для восстановления пароля
    do_action('retrieve_password_key', $user->user_login, $key);

    // Хешируем ключ для базы данных
    if (empty($wp_hasher)) {
        require_once ABSPATH . WPINC . '/class-phpass.php';
        $wp_hasher = new PasswordHash(8, true);
    }
    $hashed = time() . ':' . $wp_hasher->HashPassword($key);
    $wpdb->update($wpdb->users, array('user_activation_key' => $hashed), array('user_login' => $user->user_login));

    // Смена локали на соответствующую пользователю
    $switched_locale = switch_to_locale(get_user_locale($user));

    // Формируем сообщение
    $message = sprintf(__('Привет %s', 'your-text-domain'), $user->display_name) . "\r\n\r\n";
    $message .= __('Ваша регистрация на сайте xxx.com была одобрена.') . "\r\n\r\n";
    $message .= __('Чтобы установить пароль, перейдите по следующему адресу:') . "\r\n\r\n";
    $message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . "\r\n\r\n";

    // Обновляем содержимое письма
    $wp_new_user_notification_email['message'] = $message;

    return $wp_new_user_notification_email;
}

Подробное Объяснение

  1. Генерация Ключа: Мы используем wp_generate_password для генерации временного ключа, необходимого для сброса пароля.
  2. Хеширование Ключа: После генерации ключа, он хешируется и сохраняется в базе данных, что обеспечивает безопасность пользовательских данных.
  3. Формирование Сообщения: Мы создаем приветственное письмо с адресом для сброса пароля. Это сообщение содержит атрибуты, такие как имя пользователя и сайт.
  4. Отправка Письма: В конце кода изменяется массив $wp_new_user_notification_email, чтобы интегрировать созданное сообщение.

Заключение

Таким образом, с помощью данной функции вы сможете успешно настроить кастомизированное приветственное письмо для новых пользователей в вашем WordPress. Убедитесь также, что используете правильный домен и текстовые домены для многоязычной поддержки вашего сайта.

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

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

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