Владельцы сайтов на WordPress часто сталкиваются с ситуацией, когда необходимо временно или постоянно остановить отправку всех email-сообщений с сайта. Это может быть полезно при тестировании, разработке или решении проблем с рассылкой без риска случайной отправки писем пользователям. В этой статье мы подробно рассмотрим, как отключить email в WordPress без удаления плагинов, с примерами кода и рекомендациями по использованию.
Зачем отключать отправку email в WordPress?
По умолчанию WordPress отправляет различные уведомления: о регистрации пользователей, восстановлении пароля, новых комментариях, заказах в WooCommerce и др. Однако бывают ситуации, когда:
- Вы тестируете сайт на локальном сервере и не хотите спамить реальных пользователей;
- Ведется отладка или разработка новых функций, которые вызывают email-уведомления;
- Проблемы с почтовым сервером требуют приостановить рассылку;
- Вы хотите временно отключить email без удаления уже настроенных плагинов для рассылки.
Оставлять плагины активными, но при этом блокировать отправку писем поможет повысить гибкость работы и ускорит тестирование.
Способы отключения отправки email в WordPress
Использование фильтра wp_mail
Самый простой и надежный способ — перехватить функцию wp_mail, которая отвечает за отправку писем, и сделать ее заглушкой. Для этого добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wplock_disable_wp_mail( $to, $subject, $message, $headers, $attachments ) {
// Можно логировать попытки отправки, если нужно
error_log('Email отключен. Письмо в: ' . print_r($to, true) . ' с темой: ' . $subject);
// Не отправляем письмо, возвращаем true для успеха
return true;
}
add_filter( 'wp_mail', 'wplock_disable_wp_mail', 10, 5 );
Однако фильтр wp_mail не всегда легко перехватить напрямую, поэтому лучше использовать фильтр phpmailer_init или полностью переопределить функцию wp_mail().
Переопределение функции wp_mail()
Создайте плагин или добавьте в functions.php такой код, который блокирует отправку:
if ( ! function_exists( 'wp_mail' ) ) {
function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) {
// Просто логируем и ничего не отправляем
error_log('wp_mail вызвана, но отправка отключена. Кому: ' . print_r($to, true));
return true;
}
}
Этот метод гарантирует, что никакие письма не покинут сервер, даже если плагины пытаются их отправить.
Использование фильтра pre_wp_mail()
Начиная с WordPress 5.5 появился фильтр pre_wp_mail, который позволяет полностью перехватить отправку:
add_filter('pre_wp_mail', 'wplock_prevent_email_sending', 10, 2);
function wplock_prevent_email_sending( $null, $atts ) {
error_log('Отправка email заблокирована. Тема: ' . $atts['subject']);
// Возвращаем true, чтобы имитировать успешную отправку
return true;
}
Этот способ наиболее современный и рекомендуется для новых проектов.
Практические советы и рекомендации
Логирование попыток отправки
Для удобства отладки полезно сохранять информацию о попытках отправки в лог. Это поможет понять, какие письма пытаются уйти, и вовремя обнаружить ошибки.
Отключение email только для определенных плагинов
Если нужно отключить email не полностью, а только для конкретных плагинов, изучите их документацию — многие используют собственные хуки для отправки почты. Пример для WooCommerce:
add_filter( 'woocommerce_email_enabled_customer_processing_order', '__return_false' );
add_filter( 'woocommerce_email_enabled_new_order', '__return_false' );
Так можно selectively отключать только нужные уведомления.
Использование плагина Clearfy для управления email
Если вы используете плагин Clearfy, обратите внимание на настройки оптимизации, где можно отключать системные email и управлять ими без кода.
Как временно отключить email при использовании SMTP-плагинов
Если на сайте настроена отправка почты через SMTP-плагины (например, WP Mail SMTP), отключить отправку можно двумя способами:
- Временно деактивировать SMTP-плагин;
- Использовать фильтр
wp_mail, чтобы блокировать отправку, как описано выше.
Также можно изменить настройки SMTP, указав несуществующий SMTP-сервер для теста.
Выводы и лучшие практики
Отключение отправки email в WordPress без удаления плагинов — задача, с которой сталкиваются многие разработчики. Лучший способ — использовать фильтр pre_wp_mail или переопределять функцию wp_mail, чтобы полностью перехватить отправку. Это гарантирует, что письма не уйдут, но плагины останутся активными и смогут работать.
Для частичного отключения изучайте документацию плагинов и применяйте их собственные фильтры. Не забывайте логировать попытки отправки для отладки.
Если вы предпочитаете готовые решения, обратите внимание на Clearfy, который поможет управлять письмами без кода.