Вопрос или проблема
Я хочу заменить следующее сообщение при создании пользователя в панели управления в качестве администратора:
Имя пользователя: 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;
}
Подробное Объяснение
- Генерация Ключа: Мы используем
wp_generate_password
для генерации временного ключа, необходимого для сброса пароля. - Хеширование Ключа: После генерации ключа, он хешируется и сохраняется в базе данных, что обеспечивает безопасность пользовательских данных.
- Формирование Сообщения: Мы создаем приветственное письмо с адресом для сброса пароля. Это сообщение содержит атрибуты, такие как имя пользователя и сайт.
- Отправка Письма: В конце кода изменяется массив
$wp_new_user_notification_email
, чтобы интегрировать созданное сообщение.
Заключение
Таким образом, с помощью данной функции вы сможете успешно настроить кастомизированное приветственное письмо для новых пользователей в вашем WordPress. Убедитесь также, что используете правильный домен и текстовые домены для многоязычной поддержки вашего сайта.
Не забудьте протестировать письмо, создавая новых пользователей в вашем WordPress, чтобы убедиться, что все работает корректно. Вы всегда можете дополнительно настраивать сообщение, добавляя больше информации, если это необходимо.