Cuando se trata de seguridad, sabemos lo importante que es actualizar regularmente las instalaciones de WordPress (núcleo, temas y plugins), y cuánto tiempo podría llevarnos el proceso de actualización, especialmente cuando hemos instalado un buen número de plugins. Normalmente se recomienda seguir estos pasos:

  1. Archivos de backup y tablas de bases de datos
  2. Deshabilitar los plugins
  3. Actualización
  4. Habilitar los plugins uno por uno
  5. Revisa el sitio web

Podría ser una tarea tediosa para un solo sitio web, y podría ser un trabajo molesto y complejo cuando tenemos que actualizar cinco, diez o más sitios web.

Con el propósito específico de mejorar la seguridad de la instalación y facilitar la administración del sitio, WordPress 3.7 introdujo actualizaciones automáticas. De forma predeterminada, esta fantástica función está habilitada para versiones menores (es decir, versiones de mantenimiento y seguridad) y archivos de traducción, pero es posible personalizar cualquier tipo de actualizaciones. Así que, en este post, veremos cómo automatizar el proceso de actualización cada vez que se lance una nueva versión del núcleo, tema o plugin de WordPress. ¡Vamos a sumergirnos en las actualizaciones automáticas de WordPress!

Actualizaciones automáticas de WordPress
Actualizaciones automáticas de WordPress

Índice de actualizaciones automáticas

Actualizaciones automáticas de WordPress

Hay cuatro tipos de actualizaciones y actualizaciones automáticas de WordPress:

  1. Actualizaciones del núcleo
  2. Actualizaciones de los plugins
  3. Actualizaciones de temas
  4. Actualizaciones de los archivos de traducción

Las actualizaciones del núcleo se dividen en tres subtipos:

  1. Desarrollo del núcleo (solo disponible para instalaciones de desarrollo)
  2. Actualizaciones menores del núcleo (mantenimiento y seguridad) – habilitadas por defecto en instalaciones estables
  3. Principales actualizaciones del núcleo

WordPress permite automatizar el proceso de actualización para cualquiera de estos tipos proporcionando dos constantes wp-config.php y un buen número de filtros API.

Control de las actualizaciones de fondo a través de wp-config.php

WordPress proporciona un par de constantes wp-config.php que nos permiten controlar las actualizaciones automáticas. Poner AUTOMATIC_UPDATER_DISABLED en true deshabilitará cualquier tipo de actualización automática:

define( 'AUTOMATIC_UPDATER_DISABLED', true );

WP_AUTO_UPDATE_CORE nos permite controlar las actualizaciones del núcleo (versiones menores, mayores y de desarrollo). Esta constante puede definirse de la siguiente manera:

# Disables all core updates:
define( 'WP_AUTO_UPDATE_CORE', false );

# Enables all core updates, including minor and major:
define( 'WP_AUTO_UPDATE_CORE', true );

# Enables minor updates:
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

En las instalaciones de desarrollo WP_AUTO_UPDATE_CORE por defecto es true. En las instalaciones estables, el valor por defecto es minor.

Para completar, debo mencionar una constante adicional que puede ser definida para desactivar las actualizaciones automáticas. Sin embargo, al establecer su valor a true se desactivará cualquier edición de archivos, incluso temas e instalaciones de plugins y actualizaciones manuales.

define( 'DISALLOW_FILE_MODS', true );

En su lugar, puede que prefieras definir la constante DISALLOW_FILE_EDITS, que deshabilitaría el editor de archivos, pero manteniendo seguras las funcionalidades de instalación y actualización.

Tutorial relacionado: wp-config.php File – An In-Depth View on How to Configure WordPress

Control de las actualizaciones de fondo a través de los filtros de la API

Las constantes de configuración proporcionan una forma general de activar o desactivar las actualizaciones automáticas. Pero WordPress proporciona una serie de filtros que proporcionan un control más amplio sobre cualquier tipo de actualizaciones.

Nota: Los filtros deben usarse dentro de los plugins, y los «plugins obligatorios» son una buena opción para las actualizaciones de fondo. Los mu-plugins residen en una carpeta específica dentro del contenido de /wp-content y se habilitan automáticamente por WordPress. Estos plugins no aparecen en la pantalla de plugins de WordPress, por lo que no pueden ser desactivados o eliminados accidentalmente por los administradores del sitio. Para una visión más profunda, consulta la documentación del Codex

Primero, return true a través del filtro automatic_updater_disabled tiene el mismo efecto que definir la constante AUTOMATIC_UPDATER_DISABLED a true en wp-config.php:

add_filter( 'automatic_updater_disabled', '__return_true' );

Podemos controlar cualquiera de los tipos de actualización a través de los filtros auto_update_$type que habilitan o deshabilitan las actualizaciones dependiendo del valor de $type ('core', 'plugin', 'theme' o 'translation').

Por lo tanto, podemos automatizar todas las actualizaciones del núcleo devolviendo true a través del filtro auto_update_core:

add_filter( 'auto_update_core', '__return_true' );

En el siguiente ejemplo, estamos habilitando las actualizaciones automáticas de temas, plugins y traducciones:

add_filter( 'auto_update_theme', '__return_true' );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_translation', '__return_true' );

En los ejemplos anteriores hemos activado las actualizaciones automáticas. Pero estos filtros nos dan un mayor control sobre las actualizaciones. En el siguiente ejemplo estamos automatizando las actualizaciones automáticas de dos plugins específicos:

function cb_auto_update_plugins ( $update, $item ) {
	$plugins = array ( 'hello', 'akismet' );
	if ( in_array( $item->slug, $plugins ) ) {
		// update plugin
		return true; 
	} else {
		// use default settings
		return $update; 
	}
}
add_filter( 'auto_update_plugin', 'cb_auto_update_plugins', 10, 2 );

La función de devolución de llamada mantiene dos argumentos:

  1. $update: una booleana que define si debe ser actualizada o no;
  2. $item: el objeto de la oferta de actualización.

La función comprueba si el elemento a actualizar está en la matriz de $plugins, y en consecuencia lo devuelve true o false .

Por último, podemos hacer la diferencia entre el desarrollo, las actualizaciones menores y mayores, devolviendo true o false a través de los siguientes filtros:

add_filter( 'allow_dev_auto_core_updates', '__return_false' );
add_filter( 'allow_minor_auto_core_updates', '__return_true' );
add_filter( 'allow_major_auto_core_updates', '__return_true' );

Sabemos que ocasionalmente una actualización puede fallar. En el peor de los casos, el sitio web puede caer después de un fallo de actualización. Pero por suerte podemos pedirle a WordPress que nos notifique con un correo electrónico después de cualquier actualización (o intento).

Correos electrónicos de resultados, notificaciones y depuraciones

Dependiendo del resultado del proceso de actualización, WordPress envía un correo electrónico diferente a la dirección del administrador:

  • Se envía un correo electrónico de resultados después de una actualización automática del núcleo;
  • Se envía un correo electrónico de notificación cuando WordPress no puede ejecutar una actualización automática;
  • Se envía un correo electrónico de depuración en las versiones de desarrollo de WordPress.

Cada vez que una actualización automática tiene éxito o falla, WordPress envía un correo electrónico de resultado o de notificación con uno de los siguientes temas:

  • Su sitio se ha actualizado a WordPress XXX (en caso de éxito)
  • WordPress XXX está disponible. ¡Por favor, actualízala! (la actualización falló y se requiere una actualización manual: caso fallido)
  • URGENTE: Tu sitio puede estar caído debido a una actualización fallida (la actualización falló y WordPress podría estar caído: caso crítico)

El filtro auto_core_update_send_email controla los correos electrónicos de resultados y notificaciones. Estos correos electrónicos pueden ser desactivados devolviendo el false de la siguiente manera:

apply_filters( 'auto_core_update_send_email', '__return_false' );

Especialmente si planeas extender las actualizaciones automáticas a las principales versiones del núcleo y/o del tema y de los plugins, puede que prefieras dejar habilitados los correos electrónicos de resultados y notificaciones, o personalizarlos según el resultado o la tipología de la actualización. En el siguiente ejemplo, WordPress no enviará el correo electrónico de resultados en caso de éxito:

function cb_auto_core_update_send_email ( $send, $type, $core_update, $result ) {
	if ( !empty( $type ) && $type == 'success' ) {
		// don't send email
		return false; 
	}
		// use default settings
		return $send; 
	}
}
add_filter( 'auto_core_update_send_email', 'cb_auto_core_update_send_email', 10, 4 );

La función de devolución de llamada mantiene los siguientes argumentos:

  • $send es un booleano que determina si enviar un resultado o un email de notificación;
  • $type es una cadena que establece el tipo de correo electrónico que se enviará (éxito, fracaso o crítico);
  • $core_update es el objeto de oferta de actualizaciónl;
  • $result es el resultado de la actualización del núcleo (puede ser un WP_Error).

De forma predeterminada, se notifica a los administradores cuando la oferta de actualización recibida de WordPress.org establece una marca determinada y la instalación no puede actualizarse. El correo electrónico de notificación se enviará solo una vez por cada lanzamiento. El filtro send_core_update_notification_email permite cierta discreción en cuanto a si hay que enviar y cuándo enviar este tipo de notificaciones. Aplica el filtro de la siguiente manera:

apply_filters( 'send_core_update_notification_email', '__return_true' );

Por último, el filtro de correo electrónico automatic_updates_send_debug_email controla los correos electrónicos de depuración, que proporcionan información de registro útil sobre las actualizaciones realizadas. Por defecto, estos correos electrónicos son enviados por las instalaciones de desarrollo. Return false evitará que WordPress envíe correos electrónicos de depuración, mientras que return true habilitará estos correos electrónicos incluso en instalaciones estables:

apply_filters( 'automatic_updates_send_debug_email', '__return_true' );

Cuándo y por qué hay que deshabilitar las actualizaciones automáticas de WordPress

El proceso de auto-actualización es una  función muy buena para muchos usuarios, ya que pueden ahorrar mucho tiempo y trabajo.

Pero aunque las actualizaciones automáticas parezcan que son realmente seguras, deberíamos preguntarnos si siempre es una buena idea habilitarlas todas.

Ocasionalmente, podríamos experimentar problemas de incompatibilidad en los temas y plugins que podrían interrumpir algunas funcionalidades o incluso romper el sitio web. Si el sitio web depende de un buen número de plugins, podría ser más seguro realizar actualizaciones manuales, al menos para los plugins. El proceso de actualizar uno por uno nos permite detectar rápidamente los problemas que la automatización haría difícil de encontrar.

Además, si eres un desarrollador, debes tener cuidado con los nombres que elijas para tus temas y plugins, incluso si no piensas distribuirlos. Cuando se realizan actualizaciones, WordPress busca en el directorio de plugins nuevas versiones de los mismos y sobrescribe los archivos si se encuentra un plugin con el mismo nombre. Por lo tanto, si piensas habilitar actualizaciones de fondo para temas y plugins, asegúrate de establecer nombres únicos para tus guiones.

Sí, eso es un montón de cosas buenas para los desarrolladores. Pero, ¿cómo puede un usuario no desarrollador gestionar las actualizaciones automáticas?

Controla las actualizaciones automáticas de WordPress con plugins

Si no eres un desarrollador, puedes controlar las actualizaciones automáticas de WordPress usando un plugin.

El Administrador de Actualizaciones permite a los usuarios administradores controlar las actualizaciones de WordPress tanto en instalaciones de un solo sitio como de múltiples sitios. El plugin permite gestionar todas las tipologías de actualizaciones de WordPress, y los temas y plugins pueden ser seleccionados individualmente para las actualizaciones automáticas. Las funciones adicionales se relacionan con los correos electrónicos de notificación, bloqueo de usuarios y registro de actualizaciones de plugins.

Easy Updates Manager
Easy Updates Manager

En caso de incompatibilidad, podría ser necesario volver rápidamente a una versión anterior de un tema o plugin. WP Rollback te permite restaurar una versión anterior de cualquier tema y plugin instalado desde la pantalla de plugins. Solo tienes que hacer clic en el enlace Rollback y el plugin te mostrará una lista de todas las versiones disponibles.
Desafortunadamente, WP Rollback no será de ayuda si tu sitio web se cae, así que no te olvides de hacer una copia de seguridad y leer cuidadosamente la documentación online.

WP Rollback
WP Rollback

Finalmente, si necesitas una prueba de compatibilidad de actualizaciones automáticas en tu instalación de WordPress, el Background Update Tester te proporcionará la información que necesitas.

Actualizaciones automáticas de los plugins y temas premium

Como desarrollador de plugins o temas de WordPress de primera calidad, es tu deber integrar un mecanismo de actualizaciones automáticas en tus productos para ofrecer la misma experiencia de actualización perfecta que los usuarios esperan de los productos de WordPress.org. Esto se ha convertido en el estándar del mercado actual (por una buena razón). Puedes alojar los productos premium tu mismo y desarrollar un mecanismo de actualizaciones, o aprovechar plataformas como Freemius, Kernl o WP Updates, que ofrecen un repositorio seguro y actualizaciones automáticas como un servicio, listo para usar.

Resumen

Las actualizaciones automáticas de WordPress es una gran funcionalidad que podría ahorrarnos mucho tiempo y trabajo, y nos permite mantener nuestro sitio web actualizado regularmente. Pero, ¿activarías todo tipo de actualizaciones? Háznoslo saber en los comentarios de abajo.

Carlo Daniele Kinsta

Carlo es un diseñador y desarrollador de front-end freelance. Cuando escribe artículos y tutoriales, Carlo se ocupa principalmente de los estándares web, pero cuando juega con sitios web, su mejor compañero de trabajo es WordPress.