Иногда требуется полностью отключить отправку электронных писем из WordPress — например, на тестовом сайте, чтобы не рассылать уведомления пользователям или администраторам, или на локальной среде разработки. Хотя многие используют плагины для этого, нередко удобно сделать это программно и навсегда исключить возможность отправки почты.
Почему может понадобиться отключить email в WordPress
WordPress по умолчанию отправляет множество системных сообщений: уведомления о новых комментариях, смене пароля, регистрациях, и многое другое. На продакшн-сайте это полезно, но на тестовых или локальных инсталляциях эти письма бесполезны и могут создавать нагрузку на SMTP-серверы или засорять почтовые ящики.
Еще одна причина — при миграции сайтов или при разработке новых функциональных модулей, когда хочется отключить все email-сообщения, чтобы не беспокоить реальных пользователей.
Решение через плагины есть, но они могут конфликтовать с другими, или создавать лишний оверхед. В таких случаях удобнее использовать готовый код.
Как работает отправка email в WordPress
Для отправки почты WordPress использует функцию wp_mail(), которая внутри вызывает PHP-функцию mail(). Чтобы отключить отправку, можно перехватить вызов wp_mail() и предотвратить фактическую отправку писем.
Кроме того, для разных плагинов и тем могут использоваться свои методы отправки почты, но большинство придерживается стандартной функции wp_mail().
Практическое решение: отключение wp_mail через фильтр
Самый простой и надежный способ — использовать фильтр wp_mail или обернуть функцию wp_mail() своей, которая всегда возвращает false.
Добавьте следующий код в файл functions.php вашей темы или в файл вашего кастомного плагина:
function wpcom_disable_wp_mail( $atts ) {
// Можно залогировать $atts, если нужно
return false; // Отключаем отправку
}
add_filter( 'wp_mail', 'wpcom_disable_wp_mail', 10, 1 );Однако фильтр wp_mail не всегда позволяет полностью остановить отправку. Поэтому более надежный метод — переопределить функцию wp_mail() с помощью pluggable функций:
if ( ! function_exists( 'wp_mail' ) ) {
function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) {
// Возвращаем false, чтобы не отправлять почту
return false;
}
}Но этот способ работает только если ваш код загружается до вызова оригинальной функции wp_mail().
Использование хуков для отключения разных типов писем
Некоторые стандартные письма WordPress можно отключить индивидуально, например уведомления о новых комментариях или смене пароля, с помощью соответствующих фильтров:
wp_new_comment_notify_email— фильтр для уведомления о комментариях;send_password_change_email— контролирует отправку писем при смене пароля;send_email_change_email— контролирует уведомления об изменении email пользователя.
Пример отключения уведомлений о новых комментариях:
add_filter( 'wp_new_comment_notify_email', '__return_false' );Отключение уведомлений об изменении пароля
Чтобы отключить письма при смене пароля, добавьте:
add_filter( 'send_password_change_email', '__return_false' );Отключение уведомлений об изменении email пользователя
add_filter( 'send_email_change_email', '__return_false' );Таким образом, можно выборочно контролировать типы сообщений.
Пример комплексного отключения всех писем на сайте
Ниже пример кода, который полностью блокирует отправку почты на уровне wp_mail() и отключает системные уведомления WordPress:
add_filter( 'wp_mail', function( $args ) {
// Блокируем отправку
return false;
});
add_filter( 'wp_new_comment_notify_email', '__return_false' );
add_filter( 'send_password_change_email', '__return_false' );
add_filter( 'send_email_change_email', '__return_false' );Альтернативы: плагины для отключения email
Если вы все же хотите использовать плагин, но с расширенными возможностями, обратите внимание на:
- Disable Emails — простой плагин, отключающий отправку всех писем;
- Clearfy Pro — расширенный плагин оптимизации, который также позволяет управлять email-сообщениями и отключать ненужные уведомления;
- WPRemark — плагин для управления комментариями, в том числе отключения уведомлений.
Тестирование отключения email на сайте
После добавления кода важно убедиться, что письма действительно не отправляются. Для этого можно использовать плагины отладки, например, WP Mail Logging, который покажет попытки отправки почты.
Если лог показывает попытки, но письма не приходят, значит отключение сработало. Если письма приходят, проверьте правильность размещения кода и приоритеты фильтров.
Выводы и рекомендации
Отключение отправки email из WordPress без плагинов — полезный навык, особенно для разработчиков и тестировщиков. Приведенный код можно использовать как временно, так и постоянно, чтобы избежать нежелательных писем.
Если нужна гибкая настройка, лучше использовать плагины с возможностью отключения отдельных типов уведомлений.