Cómo recibir notificaciones por correo electrónico cuando se publique una nueva entrada en WordPress
Es muy útil recibir notificaciones por correo electrónico cuando se publica una nueva entrada en WordPress. Esto te permite estar al día de los últimos contenidos de tu blog y compartirlos con tus lectores.
En este artículo, te mostraré cómo configurar notificaciones por correo electrónico para las entradas publicadas en WordPress.

En este caso vamos a ver como enviar un mail a una cuenta de correo específica cuando se publique una entrada del blog en un determinado idioma. El lenguaje en esta ocasión es gestionado por el plugin WPML. Comenzamos.
¿En qué momento lanzamos la notificación?
Lo primero es consultar la documentación de WordPress para ver qué acción nos interesa. En este caso la acción a utilizar es “publish_post”, que se ejecuta cada vez que se publica un artículo.
function post_published_notification( $id, $post ) {
// Acciones a realizar.
}
add_action( 'publish_post', 'post_published_notification', 10, 2 );
¿En qué idioma?
En este momento debemos ver cuál es el idioma del artículo, y en caso de ser el deseado, obtenemos la información que queremos enviar.
Para saber el idioma utilizaremos la constante ICL_LANGUAGE_CODE de WPML. En este ejemplo en concreto, solo necesitamos enviarlo en los artículos del idioma en «francés».
$lang = ICL_LANGUAGE_CODE;
if ('fr' === ICL_LANGUAGE_CODE) {
// Recoger información y enviar email.
}
Otra opción es que, según el idioma del artículo, se enviase un email a cada responsable de ese país / idioma.
Obtener el contenido que queremos enviar.
Vamos a obtener los siguientes datos:
- Nombre del autor
- Título
- URL del artículo
// Autor
$author_id = $post->post_author;
$email = get_the_author_meta( 'user_email', $author_id );
// Título
$title = $post->post_title;
// Link del artículo
$permalink = get_permalink( $id );
Recordad que en la acción recibimos la variable «id» del artículo / post, y la variable «post», y podríamos sacar más información del artículo si fuese necesario.
¿Cómo enviar información por Email?
Para el envío del email utilizaremos la función wp_mail que trae WordPress. Si queréis saber más sobre esta función os recomiendo la ponencia que dio Samuel Aguilera en la WordCamp de Madrid del 2018.
Tendrá el siguiente código:
// Quien lo envía nombre y email del autor
$to[] = sprintf( '%s <%s>', 'nombre de la persona que recibira el mail', 'email de la persona que recibira el mail' );
// Asunto, que llevara el título
$subject = sprintf( 'Artículo publicado: %s', $title );
// Mensaje
$message = sprintf ('El autor, %s! ha publicado el artículo: “%s”.' . "\n\n", $name, $title );
$message .= sprintf( 'Enlace del artículo: %s', $permalink );
// Cabecera
$headers[] = ‘';
// Envío
wp_mail( $to, $subject, $message, $headers );
Si al mensaje le queréis dar un diseño, o va a ser extenso, lo mejor es separarlo del código y crear una plantilla de email en WordPress, así está separada de la funcionalidad y se pueden crear varias plantillas en función del perfil del autor. Por ejemplo:
En un Custom Post Types
Para hacerlo sobre un CPT sería usando «publish_{$custom_post_type}». Por ejemplo, si lo queremos usar en un tipo «webinar» sería:
add_action( 'publish_webinar', 'post_published_notification', 10, 2 );
Excelente recurso si necesitas modificar los envíos de emails de WordPress https://github.com/johnbillion/wp_mail
Conclusión y código final.
Como veis es algo muy sencillo y se puede aplicar a otras acciones del artículo. También tenéis otras soluciones si preferís no tocar el código, por ejemplo estos plugin: WP Status Notifier, Post Status Notifier Lite
El código final quedaría de esta manera:
function post_published_notification( $id, $post ) {
$lang = ICL_LANGUAGE_CODE;
if ('fr' === ICL_LANGUAGE_CODE) {
// Autor
$author_id = $post->post_author;
$email = get_the_author_meta( 'user_email', $author_id );
// Título
$title = $post->post_title;
// Link del artículo
$permalink = get_permalink( $id );
// Quien lo envía nombre y email del autor
$to[] = sprintf( '%s <%s>', 'nombre de la persona que recibira el mail', 'email de la persona que recibira el mail' );
// Asunto, que llevara el título
$subject = sprintf( 'Artículo publicado: %s', $title );
// Mensaje
$message = sprintf ('El autor, %s! ha publicado el artículo: “%s”.' . "\n\n", $name, $title );
$message .= sprintf( 'Enlace del artículo: %s', $permalink );
// Cabecera
$headers[] = ‘';
// Envío
wp_mail( $to, $subject, $message, $headers );
}
}
add_action( 'publish_post', 'post_published_notification', 10, 2 );
Espero que os sirva de utilidad, o por lo menos os abra las puertas para pensar en otras funcionalidades.
¡Nos vemos!