Проблема: необходимость скрыть email пользователя в уведомлениях WooCommerce
При использовании WPForms для сбора данных клиентов и интеграции с WooCommerce, в уведомления о новых заказах часто попадает email пользователя, который может содержать личные данные. В некоторых случаях требуется скрыть или замаскировать email в уведомлениях, чтобы повысить безопасность или соответствовать требованиям конфиденциальности.
Диагностика проблемы
Для начала убедитесь, что email пользователя действительно передается в уведомления WooCommerce. Сделать это можно, отправив тестовый заказ и проверив содержимое письма на email администратора.
Также проверьте, откуда именно берется email: из данных WPForms, переданных в заказ, или из стандартных полей WooCommerce.
Как проверить источник email в уведомлениях
- В админке WordPress перейдите в
WooCommerce > Заказыи откройте последний заказ. - Посмотрите, какие данные содержатся в метаполях заказа (Custom Fields).
- Проверьте настройки WPForms, какие поля email используются и как они передаются в WooCommerce (например, через хуки
woocommerce_checkout_create_orderилиwoocommerce_new_order).
Пошаговое решение: замена email на маску в уведомлениях WooCommerce
Для скрытия email в уведомлениях нужно перехватить отправку письма и заменить адрес пользователя на замаскированный вариант. Сделать это можно с помощью фильтра woocommerce_email_recipient_new_order или в шаблонах уведомлений.
Пример кода для маскировки email в уведомлениях
add_filter('woocommerce_email_recipient_new_order', 'wpforms_mask_user_email_in_email', 10, 2);
function wpforms_mask_user_email_in_email($recipient, $order) {
// Получаем email покупателя
$email = $order->get_billing_email();
if (!$email) {
return $recipient;
}
// Маскируем часть email: заменяем все символы до '@' на звездочки, оставляя первые и последние по 1 символу
list($name, $domain) = explode('@', $email);
if (strlen($name) > 2) {
$masked_name = substr($name, 0, 1) . str_repeat('*', strlen($name) - 2) . substr($name, -1);
} else {
$masked_name = str_repeat('*', strlen($name));
}
$masked_email = $masked_name . '@' . $domain;
// Заменяем email в получателях письма
if (stripos($recipient, $email) !== false) {
$recipient = str_ireplace($email, $masked_email, $recipient);
}
return $recipient;
}Этот фильтр заменит email получателя в письме на маскированный вариант, например: j***e@example.com.
Как скрыть email в тексте письма
Помимо адреса получателя, email может отображаться в самом теле письма. Для этого потребуется изменить шаблон уведомления или использовать фильтр woocommerce_email_order_meta.
add_action('woocommerce_email_order_meta', 'wpforms_mask_email_in_order_meta', 10, 3);
function wpforms_mask_email_in_order_meta($order, $sent_to_admin, $plain_text) {
$email = $order->get_billing_email();
if (!$email) {
return;
}
list($name, $domain) = explode('@', $email);
if (strlen($name) > 2) {
$masked_name = substr($name, 0, 1) . str_repeat('*', strlen($name) - 2) . substr($name, -1);
} else {
$masked_name = str_repeat('*', strlen($name));
}
$masked_email = $masked_name . '@' . $domain;
echo '<p><strong>Пользователь email:</strong> ' . esc_html($masked_email) . '</p>';
}Проверка результата после внедрения
- Создайте тестовый заказ через форму WPForms с интеграцией в WooCommerce.
- Проверьте email администратора или другого получателя уведомления — email пользователя должен быть замаскирован.
- Проверьте содержимое письма, чтобы убедиться, что email в тексте уведомления тоже скрыт.
- При необходимости откорректируйте маскировку.
Частые ошибки и как их исправить
- Замена email не сработала: возможно, фильтр подключён неправильно или приоритет слишком низкий. Попробуйте повысить приоритет, например, до 20.
- Маскировка работает, но email виден в других уведомлениях: добавьте фильтры для других событий WooCommerce, например,
woocommerce_email_recipient_customer_processing_order. - Email не подменяется в теле письма: требуется изменить именно шаблон уведомления или применить дополнительные хуки, так как стандартный
woocommerce_email_order_metaможет не покрывать все места.
Практические советы по безопасности и производительности
- Не храните реальные email пользователей в публичных местах или в виде открытого текста в шаблонах письма.
- Используйте кэширование и минимизируйте количество тяжелых операций при маскировке, чтобы не замедлять отправку почты.
- Если требуется более сложное управление уведомлениями, рассмотрите использование плагинов, поддерживающих кастомизацию WooCommerce email, например Clearfy Pro.
Чек-лист для реализации маскировки email в WPForms + WooCommerce
- Проверить, откуда берется email пользователя.
- Добавить фильтр
woocommerce_email_recipient_new_orderдля маскировки email в получателях. - Добавить action
woocommerce_email_order_metaдля маскировки email в теле письма. - Протестировать отправку заказов и проверить письма.
- Исправить ошибки и добавить поддержку других типов уведомлений, если нужно.
Сравнение способов маскировки email в уведомлениях WooCommerce
| Метод | Где маскируется | Плюсы | Минусы |
|---|---|---|---|
Фильтр woocommerce_email_recipient_new_order | В поле получателя письма | Простой, не требует правки шаблонов | Не скрывает email в теле письма |
Action woocommerce_email_order_meta | В теле письма | Можно кастомизировать отображение, гибко | Требует программирования, может не покрыть весь текст письма |
| Редактирование шаблонов email | Весь текст письма | Максимальный контроль над содержимым | Трудоемко, сложнее поддерживать при обновлениях WooCommerce |