На днях я столкнулся с такой нестандартной задачей — по одному из проектов нужно было отправить логин и пароль на почту сразу после регистрации пользователя на сайте.
Если Вы когда-то пытались это реализовать, то наверняка знаете, что у WordPress по их политике конфиденциальности нельзя просто так взять и отправить пароль на почту т.к. он в базу данных попадает в зашифрованном виде.
Мне же как раз и нужно было сделать всё в точности наоборот. Делал для одного учебного центра онлайн платформу под курсы на WordPress и всё прекрасно. Курсы свои грузить просто и безлимитно условно, ученикам проходить тоже удобно, но есть одно но — кто эти ученики.
Сам учебный центр не типовые курсы рассчитанные на зумеров, а промышленной направленности — пром.безопасность, охрана труда и т.д. в общем курсы для сотрудников больших предприятий, заводов и подобного. Часто такие люди буквально на вы с новыми технологиями и типовой путь когда после регитсрации в WordPress приходит ссылка на сброс пароля не подходила.
А регистрируются ученики не самостоятельно, а их записывает и регистрирует пачкой сам учебный центр и нужно было придумать решение для того чтобы было просто, максимально прямо и в лоб. Получил на почту сразу логин, пароль и ссылку для входа в личный кабинет.
Я перебрал множество вариантов и никак не мог найти как это реализовать и в том числе с ИИ пытался найти решение, но оставил проблему на какое-то время и немного с другой стороны подошёл к вопросу и опять же через CPT нашёл решение данной задачи через хук в файле function.php
Вот собственно сам хук, можете пользоваться в свободной форме. Сдесь сразу с оформление письма в html формате для максимального упрощения для целевой аудитории.
add_action('user_register', function($user_id) {
// Генерируем пароль
$password = wp_generate_password(12, true, true);
wp_set_password($password, $user_id);
$user_info = get_userdata($user_id);
$login = $user_info->user_login;
$email = $user_info->user_email;
$subject = 'Ваши данные для входа в site.com';
// Устанавливаем заголовки для HTML
$headers = array('Content-Type: text/html; charset=UTF-8');
$message = '
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body style="margin: 0; padding: 0; font-family: Arial, sans-serif; background-color: #f4f4f4;">
<div style="max-width: 600px; margin: 0 auto; background-color: white; padding: 0;">
<!-- Шапка -->
<div style="background: linear-gradient(135deg, #2c5aa0 0%, #1e3f73 100%); color: white; padding: 30px 40px; text-align: center;">
<h1 style="margin: 0; font-size: 28px; font-weight: bold;">site.com</h1>
<p style="margin: 10px 0 0 0; font-size: 16px; opacity: 0.9;">Добро пожаловать на платформу!</p>
</div>
<!-- Основной контент -->
<div style="padding: 40px;">
<h2 style="color: #333; margin: 0 0 20px 0; font-size: 24px;">Здравствуйте!</h2>
<p style="color: #666; font-size: 16px; line-height: 1.6; margin: 0 0 30px 0;">
Для вас создана учётная запись на платформе site.com
</p>
<!-- Блок с данными -->
<div style="background: #f8f9fa; border: 2px solid #e9ecef; border-radius: 10px; padding: 25px; margin: 30px 0;">
<h3 style="color: #2c5aa0; margin: 0 0 20px 0; font-size: 20px; text-align: center;">
🔐 Ваши данные для входа
</h3>
<div style="background: white; border-radius: 8px; padding: 20px; box-shadow: 0 2px 10px rgba(0,0,0,0.1);">
<div style="margin-bottom: 15px;">
<strong style="color: #333; font-size: 16px;">Логин:</strong>
<div style="background: #e3f2fd; border: 1px solid #90caf9; border-radius: 5px; padding: 10px; margin-top: 5px; font-family: monospace; font-size: 18px; font-weight: bold; color: #1565c0;">
' . $login . '
</div>
</div>
<div>
<strong style="color: #333; font-size: 16px;">Пароль:</strong>
<div style="background: #fff3e0; border: 1px solid #ffb74d; border-radius: 5px; padding: 10px; margin-top: 5px; font-family: monospace; font-size: 18px; font-weight: bold; color: #e65100;">
' . $password . '
</div>
</div>
</div>
</div>
<!-- Кнопка входа -->
<div style="text-align: center; margin: 40px 0;">
<a href="https://site.com/cabinet/" style="display: inline-block; background: linear-gradient(135deg, #28a745 0%, #20c997 100%); color: white; text-decoration: none; padding: 15px 40px; border-radius: 50px; font-size: 18px; font-weight: bold; box-shadow: 0 4px 15px rgba(40, 167, 69, 0.3); transition: all 0.3s ease;">
🚀 Войти в личный кабинет
</a>
</div>
<div style="background: #e8f5e8; border-left: 4px solid #28a745; padding: 15px; margin: 30px 0; border-radius: 5px;">
<p style="margin: 0; color: #155724; font-size: 14px;">
💡 <strong>Совет:</strong> Сохраните эти данные в надёжном месте
</p>
</div>
</div>
<!-- Футер -->
<div style="background: #f8f9fa; padding: 30px 40px; text-align: center; border-top: 1px solid #e9ecef;">
<p style="margin: 0 0 10px 0; color: #666; font-size: 16px;">
С уважением,<br>
<strong style="color: #2c5aa0;">Команда site.com</strong>
</p>
<p style="margin: 0; color: #999; font-size: 12px;">
Это автоматическое сообщение, отвечать на него не нужно
</p>
</div>
</div>
</body>
</html>';
wp_mail($email, $subject, $message, $headers);
}, 10, 1);
Суть данного хука заключается не в том, чтобы не пытаться вытащить пароль из БД в зашифрованном виде и после этого как-то расшифровать и отправить в письме, а напротив пойти по пути когда мы сами переназначаем пароль в БД и паралельно отпраяем его в письме пользователю не вытаскивая из базы данных. Получает что этап сброса пароля пропускается, мы сами это делаем за пользователя.
На выходе пользователь получает простое и понятное сообщение и быстро приступает к обучению, без лишних сложностей.
