В некоторых случаях необходимо полностью отключить отправку email-уведомлений с сайта на WordPress. Например, это может быть полезно на этапе разработки, при миграции или для тестовых сайтов, чтобы избежать получения множества писем. В этой статье мы рассмотрим, как реализовать отключение писем без использования плагинов, с примерами кода и объяснениями.
Почему стоит отключить email-уведомления в WordPress
По умолчанию WordPress отправляет множество автоматических писем: уведомления о новых комментариях, регистрации пользователей, смене пароля, восстановлении доступа и другие. На рабочем сайте эти уведомления важны, но на тестовом или временном сайте они могут создавать неудобства. Кроме того, если на сайте есть ошибки или неправильные настройки почты, письма могут застревать или отправляться некорректно.
Отключение писем позволяет:
- Избавиться от спама в почтовом ящике во время разработки.
- Предотвратить случайную отправку писем пользователям.
- Упростить отладку сайта.
Как отключить все email-уведомления через functions.php
Самый простой способ отключить все письма — переопределить функцию wp_mail, которая отвечает за отправку почты в WordPress. Мы создадим свою функцию, которая будет всегда возвращать true (успешная отправка), но реально письма не будет.
Добавьте следующий код в файл functions.php вашей активной темы или дочерней темы:
function wp24_disable_all_emails( $to, $subject, $message, $headers, $attachments ) {
// Отключаем все письма
return true;
}
add_filter( 'wp_mail', 'wp24_disable_all_emails', 10, 5 );Однако такой подход не сработает, так как wp_mail — это функция, а не фильтр. Правильнее использовать фильтр wp_mail нельзя, но есть фильтр wp_mail_from и другие. Чтобы полностью отключить почту, можно заменить функцию через pluggable.php или использовать фильтр wp_mail с помощью phpmailer_init.
Правильное отключение почты через фильтр phpmailer_init
В WordPress для отправки почты используется класс PHPMailer. Мы можем настроить его так, чтобы отправка писем не происходила.
function wp24_disable_phpmailer( $phpmailer ) {
// Отключаем отправку почты
$phpmailer->ClearAllRecipients();
$phpmailer->Sender = '';
}
add_action( 'phpmailer_init', 'wp24_disable_phpmailer' );Этот код очищает всех получателей, и письмо не отправляется. Это безопасный способ отключить все email-уведомления.
Как selectively отключить некоторые типы уведомлений
Иногда нужно не отключать все письма, а только конкретные, например, уведомления о новых комментариях или регистрации пользователей.
Отключение уведомлений о новых комментариях
WordPress отправляет уведомления модератору и автору записи о новых комментариях с помощью функции wp_notify_postauthor и wp_notify_moderator. Для их отключения можно использовать фильтры.
function wp24_disable_comment_notification( $notify, $comment_id ) {
return false; // Отключаем уведомления
}
add_filter( 'notify_post_author', '__return_false' );
add_filter( 'notify_moderator', '__return_false' );Отключение уведомлений о новых пользователях
Чтобы отключить оповещения администратора о новой регистрации пользователя, можно переопределить функцию wp_new_user_notification_email_admin или использовать соответствующие хуки.
function wp24_disable_new_user_admin_email( $wp_new_user_notification_email_admin, $user, $blogname ) {
// Возвращаем пустой массив, чтобы отключить сообщение
return [];
}
add_filter( 'wp_new_user_notification_email_admin', 'wp24_disable_new_user_admin_email', 10, 3 );Использование плагина Clearfy Pro для управления уведомлениями
Если вы хотите более гибко управлять email-уведомлениями, но без программирования, обратите внимание на плагин Clearfy Pro. Этот плагин позволяет отключать ненужные уведомления, оптимизировать сайт и улучшать безопасность.
Clearfy Pro содержит опции для отключения писем регистрации, уведомлений о комментариях и других системных сообщений. Это удобно для администраторов, которые не хотят вникать в код.
Пример пользовательской функции для отключения почты с логированием
Иногда полезно отключить отправку почты, но при этом вести лог попыток отправки, чтобы не потерять важную информацию. Вот пример, как это сделать:
function wp24_disable_mail_but_log( $phpmailer ) {
$log_file = __DIR__ . '/email_log.txt';
$log_message = "\nTo: " . implode(', ', array_keys($phpmailer->getToAddresses())) .
"\nSubject: " . $phpmailer->Subject .
"\nMessage: " . $phpmailer->Body .
"\n------------------------";
file_put_contents( $log_file, $log_message, FILE_APPEND );
// Очищаем получателей, чтобы письмо не отправлялось
$phpmailer->ClearAllRecipients();
}
add_action( 'phpmailer_init', 'wp24_disable_mail_but_log' );Этот код сохраняет данные всех писем в файл email_log.txt в корне темы и не отправляет их. Это помогает анализировать, какие письма пытался отправить сайт.
Подводим итоги
Отключение email-уведомлений в WordPress без плагинов возможно с помощью фильтра phpmailer_init. Вы можете отключить все письма или конкретные типы уведомлений с помощью соответствующих фильтров и хуков. Для более удобного управления также существует плагин Clearfy Pro.
Используйте приведённые примеры кода в functions.php вашей темы и тестируйте работу сайта без отправки писем, что особенно полезно на этапах разработки и тестирования.