Desde la versión 3.7 de WordPress se implementaron las actualizaciones automáticas. Estas, sin preguntar al usuario, actualizaban diversos parámetros de WordPress y enviaban un mensaje a la cuenta de correo establecida informando de los cambios realziados. En principio todo parecía salir bien e ir como la seda, hasta que se dieron una serie de incidencias que hicieron que los usuarios nos pusieramos el cuchillo entre los dientes y buscáramos la forma de desactivar esta nueva funcionalidad. ¿Es recomendable dejar que WordPress se actualice automáticamente? No… y si. Como veremos a continuación, todo parte del usuario y de la gestión del sitio.

Recomendaciones sobre las actualizaciones automáticas.

– Se recomienda desactivar las actualizaciones automáticas si tenemos en el WordPress una tienda online o un proceso de reserva. No es recomendable que se actualize automáticamente ya que conviene tener la precaución de hacer antes una copia de seguridad y probar las actualizaciones en un entorno de test.

– También es recomendable desactivar las actualizaciones si usamos un plugin de multi-idioma. Con el plugin qTranslate se da el caso de que se desactiva si la versión de WordPress es superior a la que este plugin está actualizado, y tendríamos que volver a activarlo manualmente.

– Finalmente, es recomendable desactivarlas si nuestra web se basa en una agenda de eventos y usamos un plugin complejo para gestión de eventos, porque puede desorganizarnos todo lo creado con anterioridad. Para estos casos se recomiendo implementar los cambios en un entorno de test antes de pasarlo a producción.

– Si tenemos un WordPress sencillito, con una configuración estándar y los plugins típicos, podemos mantener la configuración por defecto en cuanto a actualizaciones menores. Incluso podemos activar también la actualización de plugins automática.

– En cuanto a la actualización del theme/tema, tan solo se recomienda activarla si el theme/tema está de fábrica, es decir, si no hemos tocado en absoluto el código ni implementado ningún cambio. De ser así, backup y prueba antes de cambiar nada definitivamente o te puedes encontrar con que tu web no responde.

Excepciones en las que no se actualizará automáticamente

En algunos casos no será posible la actualización automática. Estos casos son los que básicamente requieren contraseñas o tienen algún tipo de restricción para asegurar la seguridad del usuario en el servidor.

– Cuando a la hora de añadir plugins nos pide las credenciales para el acceso por FTP al servidor.

– Cuando el servidor no tiene activada el OpenSSL para PHP, ya que el instalador necesita comunicarse de forma segura a través de HTTPS con los repositorios de WordPress.org para realizar la instalación. Lo mismo ocurriría con la instalación automática de los plugins.

– Si, como desarrolladores, estamos usando un sistema de control de versiones o repositorio de código tipo SVN o GIT (podemos corregirlo con el filtro automatic_updates_is_vcs_checkout).

– Cuando wp-cron no funciona como debería por motivos de restricciones en el servidor o está desactivado.

Podemos instalar el plugin Background Update Tester para comprobar si las funcionalidades de la actualziación automática están activadas o no.

Configuración del actualizador automático

Configuración a través del wp-config.php

Podemos configurar como queremos que se comporte el actualizador automático añadiendo constantes en el fichero de configuración wp-config.php situado en la raiz del directorio donde tenemos instalado WordPress. Recomendamos eso sí hacer una copia de seguridad de este fichero que podamos restablecer antes de tocar nada, asegurándonos volver a una versión anterior por si algo saliera mal.

Para desactivar completamente las actualizaciones automáticas de cualquier tipo añadiremos la siguiente constante:

define( 'AUTOMATIC_UPDATER_DISABLED', true );

Para configurar las actualizaciones automáticas del núcleo, lo podemos hacer con la constante WP_AUTO_UPDATE_CORE. La definición de este constante puede tener tres valores:

Desactiva todas las actualizaciones del núcleo:

define( 'WP_AUTO_UPDATE_CORE', false );

Activa todas las actualizaciones del núcleo, incluidas las mayores y las versiones de desarrollo:

define( 'WP_AUTO_UPDATE_CORE', true );

Activa solo las actualizaciones menores del núcleo:

define( 'WP_AUTO_UPDATE_CORE', 'minor' );

Para una configuración más flexible, como por ejemplo activar actualizaciones mayores sin activar las de desarrollo o activar las actualizaciones de plugins o themes tendremos que usar filtros, que veremos a continuación.

Configuración a través de filtros

La configuración a través de filtros nos da más libertad y flexibilidad que la configuración por constantes. Los filtros los tenemos que añadir en el fichero functions.php de nuestro theme o en cualquier otro fichero que hayamos designado para este propósito. De nuevo, antes de probar, si no sabes muy bien lo que estás haciendo, haz una copia de seguridad del WordPress.

Para desactivar completamente las actualizaciones automáticas de cualquier tipo añadiremos el siguiente filtro:

add_filter( 'automatic_updater_disabled', '__return_true' );

Para configurar las actualizaciones del núcleo de una forma más selectiva disponemos de varios filtros. Dependiendo de si vínculamos el filtro con la directiva __return_true o __return_false activa y desactiva las actualizaciones respectivamente.

Activar las actualizaciones automáticas de las versiones mayores:

add_filter( 'allow_major_auto_core_updates', '__return_true' );

Activar las actualizaciones automáticas de las versiones de desarrollo:

add_filter( 'allow_dev_auto_core_updates', '__return_true' );

Desactivar las actualizaciones de las versiones menores:

add_filter( 'allow_minor_auto_core_updates', '__return_false' );

En el caso de que nuestro WordPress no sea compatible con las actualizaciones automáticas porque usemos un sistema de control de versiones (svn/git) podemos forzar a que se actualize automáticamente con el siguiente filtro:

add_filter( 'automatic_updates_is_vcs_checkout', '__return_false', 1 );

Para activar la actualización automática de plugins disponemos del siguiente filtro:

add_filter( 'auto_update_plugin', '__return_true' );

De la misma forma podemos activar la actualización automática de temas con el filtro:

add_filter( 'auto_update_theme', '__return_true' );

Y por último podemos desactivar la actualización de los ficheros de traducción con este filtro:

add_filter( 'auto_update_translation', '__return_false' );

Si todo este código te suena a chino y no quieres arriesgarte a tocar nada o simplemente prefieres una interfaz gráfica porque te resulta más cómoda, lo tuyo es descargarte un plugin que gestione estas actualizaciones.

Configuración a través de un plugin

Si no queremos tocar código podemos cambiar la configuración del actualizador con un plugin como Update Control 1.5.

Este plugin nos añade una sección en Ajustes > Generales desde donde podemos configurar como queremos que se comporte el actualizador automático o desactivarlo completamente.

También podemos configurar una serie de configuraciones avanzadas para el resto de apartados que comentábamos con anterioridad.

Notificaciones del actualizador automático

El actualizador automático después de ejecutarse envía un email al administrador del WordPress con el resultado: tanto si ha ido bien como si no ha salido todo como esperábamos.

No está de mas tener estos correos para saber qué ocurre en nuestro alojamiento. Podemos desactivar el envío de este email o que solo envíe el email según el resultado y tipo de actualización que queramos con un filtro:

add_filter('auto_core_update_send_email', '__return_false');

También disponemos de un filtro para modificar la dirección de email a la que envía según el resultado y tipo de actualización:

/* @param bool $send Whether to send the email. Default true.
* @param string $type The type of email to send.
* Can be one of 'success', 'fail', 'critical'.
* @param object $core_update The update offer that was attempted.
* @param mixed $result The result for the core update. Can be WP_Error.
*/
apply_filters('auto_core_update_email', $email, $type, $core_update, $result);