WordPress envía correos electrónicos automáticos en multitud de situaciones: cuando alguien se registra, cambia su contraseña, deja un comentario, se actualiza el núcleo… A veces es útil, pero otras puede resultar abrumador o simplemente innecesario.
En esta guía te muestro todas las formas de controlar estos emails de WordPress: desactivarlos por completo, filtrar algunos específicos o personalizarlos a tu gusto. Todo con código, sin depender de plugins (aunque al final te comparto un par por si prefieres la vía rápida).
Filtros y acciones globales de wp_mail()
Todos los emails de WordPress pasan por la función wp_mail(). Esto significa que puedes interceptar cualquier correo usando estos filtros y acciones:
Filtros principales:
wp_mail— Filtra todos los argumentos del email (destinatario, asunto, mensaje, cabeceras, adjuntos).pre_wp_mail— Permite cancelar el envío devolviendofalse.wp_mail_from— Cambia la dirección del remitente.wp_mail_from_name— Cambia el nombre del remitente.wp_mail_content_type— Define el tipo de contenido (text/plainotext/html).wp_mail_charset— Establece la codificación de caracteres.
Acciones:
phpmailer_init— Acceso directo al objeto PHPMailer antes del envío.wp_mail_succeeded— Se ejecuta cuando el email se envía correctamente.wp_mail_failed— Se ejecuta cuando falla el envío (útil para depuración).
Desactivar todos los emails de WordPress
Si necesitas bloquear absolutamente todos los correos (típico en entornos de desarrollo o staging) tienes varias opciones:
Opción 1: filtro pre_wp_mail
La forma más limpia y recomendada. Añade esto a tu archivo functions.php o en un plugin personalizado:
add_filter( 'pre_wp_mail', '__return_false' );
Este filtro intercepta wp_mail() antes de que haga nada, devolviendo false para cancelar el envío.
Opción 2: función personalizada más elaborada
Si quieres registrar los intentos de envío aunque no se manden:
add_filter( 'pre_wp_mail', 'ayudawp_desactivar_emails' );
function ayudawp_desactivar_emails( $return ) {
// Opcional: registrar en el log
error_log( 'Email bloqueado por ayudawp_desactivar_emails' );
return false;
}
Opción 3: sobrescribir wp_mail()
La función wp_mail() es pluggable, lo que significa que puedes redefinirla completamente. Crea un mu-plugin en /wp-content/mu-plugins/desactivar-emails.php:
<?php
if ( ! function_exists( 'wp_mail' ) ) {
function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) {
// No hace nada, solo devuelve true para simular que funciona bien
return true;
}
}
Importante: Los mu-plugins se cargan antes que los plugins normales, por lo que esta técnica garantiza que tu versión de
wp_mail()prevalezca.
Emails de comentarios
WordPress envía dos tipos de emails relacionados con comentarios.
Comentario pendiente de moderación
Función: wp_notify_moderator() (pluggable)
Filtros para personalizar:
comment_moderation_recipientscomment_moderation_subjectcomment_moderation_textcomment_moderation_headers
Para desactivarlo:
// Opción 1: filtro directo add_filter( 'notify_moderator', '__return_false' ); // Opción 2: eliminar la acción del hook remove_action( 'comment_post', 'wp_new_comment_notify_moderator' );
También puedes desactivarlo desde Ajustes → Comentarios desmarcando la opción correspondiente, si es solo para ti, y de este modo te evitas un código adicional.
Comentario publicado (notificación al autor)
Función: wp_notify_postauthor() (pluggable)
Filtros para personalizarlo:
comment_notification_recipientscomment_notification_subjectcomment_notification_textcomment_notification_headers
Para desactivarlo:
// Opción 1: filtro directo add_filter( 'notify_post_author', '__return_false' ); // Opción 2: eliminar la acción remove_action( 'comment_post', 'wp_new_comment_notify_postauthor' );
Emails de usuarios y contraseñas
Nuevo usuario creado (email al administrador)
Este correo electrónico – salvo en instalaciones muy nuevas o situaciones de especial control – casi siempre sobra.
Filtros:
wp_new_user_notification_email_adminwp_send_new_user_notification_to_admin
Para desactivarlo:
add_filter( 'wp_send_new_user_notification_to_admin', '__return_false' );
Nuevo usuario creado (email al usuario)
Este es un correo que (creo) que casi nunca deberías desactivar, pero si lo necesitas aquí lo tienes.
Filtros:
wp_new_user_notification_emailwp_send_new_user_notification_to_user
Para desactivarlo:
add_filter( 'wp_send_new_user_notification_to_user', '__return_false' );
Desactivar ambas notificaciones de nuevo usuario
// Eliminar la función que dispara ambos emails remove_action( 'register_new_user', 'wp_send_new_user_notifications' ); remove_action( 'edit_user_created_user', 'wp_send_new_user_notifications' );
Solicitud de restablecimiento de contraseña
Este es otro email que solo debes desactivar en situaciones muy particulares.
Filtros:
retrieve_password_titleretrieve_password_messageretrieve_password_notification_email
Para desactivarlo:
// Opción 1 add_filter( 'send_retrieve_password_email', '__return_false' ); // Opción 2: devolver mensaje vacío add_filter( 'retrieve_password_message', '__return_empty_string' );
Contraseña restablecida (notificación al admin)
Email que SIEMPRE sobra, de nuevo en mi humilde opinión.
Función: wp_password_change_notification() (pluggable)
Filtro: wp_password_change_notification_email
Para desactivarlo:
remove_action( 'after_password_reset', 'wp_password_change_notification' );
Usuario cambia su contraseña (notificación al usuario)
Filtro: password_change_email
Para desactivarlo:
add_filter( 'send_password_change_email', '__return_false' );
Usuario intenta cambiar su email
Filtro: new_user_email_content
Para desactivarlo:
remove_action( 'personal_options_update', 'send_confirmation_on_profile_email' );
Usuario confirma cambio de email
Filtro: email_change_email
Para desactivarlo:
add_filter( 'send_email_change_email', '__return_false' );
Emails de cambio de email del administrador
Mi consejo, por seguridad, es que nunca desactives estos emails, pero tú decides
Intento de cambiar email de administración del sitio
Filtros:
new_admin_email_subjectnew_admin_email_content
Para desactivarlo:
remove_action( 'add_option_new_admin_email', 'update_option_new_admin_email' ); remove_action( 'update_option_new_admin_email', 'update_option_new_admin_email' );
Email de administración del sitio cambiado
Filtro: site_admin_email_change_email
Para desactivarlo:
add_filter( 'send_site_admin_email_change_email', '__return_false' );
Emails de actualizaciones automáticas
Actualizaciones automáticas de WordPress
Filtro: auto_core_update_email
Para desactivarlo:
// Desactiva el email de actualizaciones correctas del núcleo de WordPress
add_filter( 'auto_core_update_send_email', '__return_false' );
// O más selectivo (solo cuando va bien, no cuando falla)
add_filter( 'auto_core_update_send_email', 'ayudawp_filtrar_email_core', 10, 4 );
function ayudawp_filtrar_email_core( $send, $type, $core_update, $result ) {
if ( ! empty( $type ) && $type === 'success' ) {
return false; // No enviar si fue bien
}
return true; // Sí enviarlo si falló
}
Actualizaciones automáticas de plugins
Filtro: auto_plugin_theme_update_email
Para desactivarlo:
add_filter( 'auto_plugin_update_send_email', '__return_false' );
Actualizaciones automáticas de temas
Para desactivarlo:
add_filter( 'auto_theme_update_send_email', '__return_false' );
Desactivar todos los emails de actualizaciones automáticas
// WordPress add_filter( 'auto_core_update_send_email', '__return_false' ); // Plugins add_filter( 'auto_plugin_update_send_email', '__return_false' ); // Temas add_filter( 'auto_theme_update_send_email', '__return_false' );
Email de depuración de actualizaciones
Solo se envía en versiones de desarrollo de WordPress:
add_filter( 'automatic_updates_send_debug_email', '__return_false' );
Emails de errores fatales y modo recuperación
Cuando ocurre un error fatal en un plugin o tema, WordPress envía un email con información de diagnóstico.
Filtros:
wp_fatal_error_handler_enabledrecovery_email_support_inforecovery_email_debug_inforecovery_mode_email
Para desactivar completamente el handler de errores fatales:
// En wp-config.php (ANTES de "That's all, stop editing!") define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );
Nota importante: El filtro
wp_fatal_error_handler_enabledno puede usarse desde plugins porque se ejecuta demasiado pronto. Solo funciona definiendo la constante enwp-config.phpcomo tienes aquí.
Para cambiar el destinatario del email de recuperación:
// En wp-config.php define( 'RECOVERY_MODE_EMAIL', 'tu-email@tudominio.com' );
Emails de solicitudes de datos personales (RGPD)
Solicitud de exportación o borrado de datos
Filtros:
user_request_action_email_subjectuser_request_action_email_contentuser_request_action_email_headers
Usuario confirma la solicitud
Filtros:
user_request_confirmed_email_touser_request_confirmed_email_subjectuser_request_confirmed_email_contentuser_request_confirmed_email_headers
Para desactivarlo:
remove_action( 'user_request_action_confirmed', '_wp_privacy_send_request_confirmation_notification' );
Email con enlace de exportación de datos
Filtros:
wp_privacy_personal_data_email_towp_privacy_personal_data_email_subjectwp_privacy_personal_data_email_contentwp_privacy_personal_data_email_headers
Para desactivarlo:
remove_action( 'wp_privacy_personal_data_export_page', 'wp_privacy_send_personal_data_export_email' );
Notificación de borrado de datos completado
Filtros:
user_erasure_fulfillment_email_touser_erasure_fulfillment_email_subjectuser_erasure_fulfillment_email_contentuser_erasure_fulfillment_email_headers
Para desactivarlo:
remove_action( 'wp_privacy_personal_data_erased', '_wp_privacy_send_erasure_fulfillment_notification' );
Personalizar el remitente de todos los emails
Por defecto, WordPress envía los emails desde wordpress@tudominio.com, pero hay muchas situaciones en las que querrás cambiarlo, no solo estéticas. A mi por ejemplo me corrigió un problema de montones de emails que se iban a spam o directamente los bloqueaban servicios como GMail.
Puedes cambiarlo así:
// Cambiar dirección del remitente por defecto de WordPress
add_filter( 'wp_mail_from', 'ayudawp_cambiar_email_remitente' );
function ayudawp_cambiar_email_remitente( $email ) {
return 'otroemail@tudominio.com';
}
// Cambiar nombre del remitente por defecto de WordPress
add_filter( 'wp_mail_from_name', 'ayudawp_cambiar_nombre_remitente' );
function ayudawp_cambiar_nombre_remitente( $nombre ) {
return 'Nombre de mi web';
}
Enviar emails en formato HTML
Por defecto WordPress envía emails en texto plano, pero puedes cambiar a HTML:
add_filter( 'wp_mail_content_type', 'ayudawp_email_html' );
function ayudawp_email_html( $content_type ) {
return 'text/html';
}
Cuidado: Este filtro afecta a todos los emails. Si solo quieres enviar algunos en HTML, recuerda quitar el filtro después de usarlo o aplicarlo selectivamente.
Registrar errores de envío de email
Muy útil para depurar problemas, y te evitas instalar un plugin solo para esto:
/* Depuración de errores en envío de emails de WordPress */
add_action( 'wp_mail_failed', 'ayudawp_registrar_error_email' );
function ayudawp_registrar_error_email( $wp_error ) {
$mensaje = 'Error de email: ' . $wp_error->get_error_message();
error_log( $mensaje );
}
Configurar SMTP sin plugins
Seguro que más de una vez has instalado un plugin para usar SMTP y así mejorar la entrega de emails, o incluso conseguir que lleguen. Pues bien, no hace falta, puedes configurarlo por tu cuenta, sin plugins, con código totalmente nativo, sin depender de actualizaciones de plugins o funcionamientos extraños:
En wp-config.php:
define( 'SMTP_HOST', 'smtp.tuservidor.com' ); define( 'SMTP_PORT', 587 ); define( 'SMTP_USER', 'usuario@tudominio.com' ); define( 'SMTP_PASS', 'tu-contraseña' ); define( 'SMTP_SECURE', 'tls' ); // 'ssl' o 'tls' define( 'SMTP_FROM', 'noreply@tudominio.com' ); define( 'SMTP_NAME', 'Nombre de mi web' );
En functions.php o un plugin:
/* Enviar emails de WordPress usando SMTP */
add_action( 'phpmailer_init', 'ayudawp_configurar_smtp' );
function ayudawp_configurar_smtp( $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->Host = SMTP_HOST;
$phpmailer->SMTPAuth = true;
$phpmailer->Port = SMTP_PORT;
$phpmailer->Username = SMTP_USER;
$phpmailer->Password = SMTP_PASS;
$phpmailer->SMTPSecure = SMTP_SECURE;
$phpmailer->From = SMTP_FROM;
$phpmailer->FromName = SMTP_NAME;
}
Emails específicos de multisitio
Si gestionas una red WordPress multisitio hay emails adicionales que puedes controlar.
Notificación de nuevo sitio creado
Filtro: new_site_email
Para desactivarlo:
add_filter( 'send_new_site_email', '__return_false' );
Email de bienvenida a nuevo usuario
Filtros:
update_welcome_user_subjectupdate_welcome_user_email
Para desactivarlo:
add_filter( 'wpmu_welcome_user_notification', '__return_false' );
Email de bienvenida a nuevo sitio
Filtros:
update_welcome_subjectupdate_welcome_email
Para desactivarlo:
add_filter( 'wpmu_welcome_notification', '__return_false' );
Notificación de registro de nuevo blog
Filtros:
wpmu_signup_blog_notification_subjectwpmu_signup_blog_notification_email
Para desactivarlo:
add_filter( 'wpmu_signup_blog_notification', '__return_false' );
Notificación de registro de nuevo usuario
Filtros:
wpmu_signup_user_notification_subjectwpmu_signup_user_notification_email
Para desactivarlo:
add_filter( 'wpmu_signup_user_notification', '__return_false' );
Cambio de email de administrador de red
Filtros:
new_network_admin_email_contentnetwork_admin_email_change_email
Para desactivar la notificación de cambio:
add_filter( 'send_network_admin_email_change_email', '__return_false' );
Código completo para desactivar emails selectivamente
Aquí tienes un codiguito, un snippet, que puedes adaptar a tus necesidades, aprovechando mucho de lo visto antes:
/** * Desactivar emails selectivamente en WordPress * Añadir en functions.php o mejor en un mu-plugin */ // === COMENTARIOS === // add_filter( 'notify_moderator', '__return_false' ); // add_filter( 'notify_post_author', '__return_false' ); // === USUARIOS === // add_filter( 'wp_send_new_user_notification_to_admin', '__return_false' ); // add_filter( 'wp_send_new_user_notification_to_user', '__return_false' ); // add_filter( 'send_password_change_email', '__return_false' ); // add_filter( 'send_email_change_email', '__return_false' ); // === CONTRASEÑAS === // add_filter( 'send_retrieve_password_email', '__return_false' ); // remove_action( 'after_password_reset', 'wp_password_change_notification' ); // === ACTUALIZACIONES AUTOMÁTICAS === add_filter( 'auto_core_update_send_email', '__return_false' ); add_filter( 'auto_plugin_update_send_email', '__return_false' ); add_filter( 'auto_theme_update_send_email', '__return_false' ); // === CAMBIO DE EMAIL ADMIN === // add_filter( 'send_site_admin_email_change_email', '__return_false' );
Descomenta (quita los //) las líneas que necesites según tu situación.
Resumen de filtros y acciones
Para desactivar emails devolviendo false:
pre_wp_mail— Todos los emails.notify_moderator— Moderación de comentarios.notify_post_author— Notificación al autor de la publicación.wp_send_new_user_notification_to_admin— Nuevo usuario (al admin).wp_send_new_user_notification_to_user— Nuevo usuario (al usuario).send_password_change_email— Cambio de contraseña.send_email_change_email— Cambio de email.send_retrieve_password_email— Solicitud de nueva contraseña.auto_core_update_send_email— Actualizaciones del núcleo.auto_plugin_update_send_email— Actualizaciones de plugins.auto_theme_update_send_email— Actualizaciones de temas.send_site_admin_email_change_email— Cambio email admin sitio.send_network_admin_email_change_email— Cambio email admin red.send_new_site_email— Nuevo sitio (multisitio).wpmu_welcome_notification— Bienvenida sitio (multisitio).wpmu_welcome_user_notification— Bienvenida usuario (multisitio).wpmu_signup_blog_notification— Registro blog (multisitio).wpmu_signup_user_notification— Registro usuario (multisitio).
Constantes útiles en wp-config.php:
WP_DISABLE_FATAL_ERROR_HANDLER— Desactiva emails de errores fatales.RECOVERY_MODE_EMAIL— Destinatario de emails de modo recuperación.AUTOMATIC_UPDATER_DISABLED— Desactiva actualizaciones automáticas (y sus emails).
Funciones pluggable que puedes sobreescribir:
wp_mail()wp_notify_moderator()wp_notify_postauthor()wp_password_change_notification()wp_new_user_notification()wp_new_blog_notification()
Alternativa: plugins
Si prefieres no tocar código estos dos plugins te permiten gestionar los emails de WordPress desde una interfaz gráfica.
Disable Emails
Disable Emails es perfecto para entornos de desarrollo o staging. Desactiva completamente el envío de emails reemplazando la función wp_mail() por una versión que no hace nada.
Características:
- Bloquea todos los emails con un clic.
- Opción de activar como mu-plugin para que siempre esté activo.
- Los hooks y filtros siguen funcionando, solo no se envía nada.
- Compatible con plugins de registro de emails para ver qué se habría enviado.
Manage Notification E-mails
Manage Notification E-mails te permite activar o desactivar emails específicos desde sus ajustes.
Características:
- Control por separado de cada tipo de notificación.
- Gestión de emails de nuevos usuarios, cambios de contraseña, actualizaciones automáticas…
- Compatible con multisitio.
- Exportación e importación de ajustes.
- Los emails de actualizaciones fallidas siempre se envían (por seguridad).
Pues ya estaría ¿no?
Con esta información tienes todo lo necesario para tomar el control total de los emails que envía tu WordPress sin tener que andar buscando en veinte sitios y documentaciones dispersas, ese trabajo ya lo he hecho yo por ti.
Ahora te toca elegir la estrategia que mejor se adapte a tu situación, o usar un código personalizado para tener el control total, sabiendo que siempre estarás usando códigos nativos de WordPress, o plugins si prefieres una solución visual y rápida, pero usando técnicas que se salen de las nativas de WordPress.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!






