Quando se trata de segurança, sabemos como é importante atualizar regularmente as instalações do WordPress (núcleo, temas e plugins), e quanto tempo o processo de atualização pode levar para nós, especialmente quando temos instalado um bom número de plugins. É comumente recomendado seguir estes passos:

  1. Arquivos de backup e tabelas de banco de dados
  2. Desativar plugins
  3. Atualização
  4. Habilitar plugins um a um
  5. Confira o site

Pode ser uma tarefa tediosa para um único site, e pode ser um trabalho aborrecido e complexo quando temos de atualizar cinco, dez ou mais sites.

Com o objetivo específico de melhorar a segurança da instalação e facilitar a administração do site, o WordPress 3.7 introduziu atualizações automáticas. Por padrão, este recurso legal é habilitado para versões menores (ou seja, versões de manutenção e segurança) e arquivos de tradução, mas é possível personalizar qualquer tipo de atualização. Então, neste artigo, veremos como automatizar o processo de atualização a qualquer momento quando uma nova versão do núcleo, tema ou plugin do WordPress for lançada. Vamos explorar em detalhes as atualizações automáticas do WordPress.

Atualizações automáticas do WordPress
Atualizações automáticas do WordPress

Índice de atualizações automáticas

Atualizações automáticas do WordPress

Existem quatro tipos de atualizações e atualizações automáticas no WordPress:

  1. Principais atualizações
  2. Atualizações de plugins
  3. Atualizações de temas
  4. Atualizações de arquivos de tradução

As atualizações principais (core updates) são divididas em três subtipos:

  1. Desenvolvimento do núcleo (apenas disponível para instalações de desenvolvimento)
  2. Atualizações menores do núcleo (manutenção e segurança) – ativadas por padrão em instalações estáveis
  3. Principais atualizações do núcleo

O WordPress permite automatizar o processo de atualização para qualquer um desses tipos, fornecendo duas constantes no arquivo wp-config.php e uma série de filtros de API.

Controle de atualizações em segundo plano através do wp-config.php

O WordPress fornece um par de constantes wp-config.php que nos permitem controlar as atualizações automáticas. Definir AUTOMATIC_UPDATER_DISABLED para true irá desabilitar qualquer tipo de atualização automática:

define( 'AUTOMATIC_UPDATER_DISABLED', true );

WP_AUTO_UPDATE_CORE permite-nos controlar as atualizações do núcleo (lançamentos menores, maiores e de desenvolvimento). Esta constante pode ser definida da seguinte forma:

# 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' );

Em instalações de desenvolvimento WP_AUTO_UPDATE_CORE é o padrão verdadeiro. Em instalações estáveis, o padrão é menor.

Por uma questão de exaustividade, devo mencionar uma constante adicional que pode ser definida para desativar as atualizações automáticas. No entanto, definir o seu valor como verdadeiro irá desativar qualquer edição de arquivos, mesmo temas e instalações de plugins e atualizações manuais.

define( 'DISALLOW_FILE_MODS', true );

Ao invés disso, você pode preferir definir a constante DISALLOW_FILE_EDITS, que desabilitaria o editor de arquivos, mas mantendo seguras as funcionalidades de instalação e atualização.

Tutorial relacionado: Arquivo wp-config.php – Uma Visão Detalhada de Como Configurar o WordPress

Controle de atualizações em segundo plano através de filtros API

As constantes de configuração fornecem uma forma geral de ativar ou desativar as atualizações automáticas. Mas o WordPress fornece uma série de filtros que garantem um controle mais profundo sobre qualquer tipo de atualização.

Nota: Os filtros devem ser usados dentro de plugins, e “deve usar plugins” são uma boa opção para atualizações de fundo. mu-plugins residem em uma pasta específica dentro do conteúdo /wp-content e são automaticamente habilitados pelo WordPress. Estes plugins não aparecem na Tela de Plugins do WordPress, portanto eles não poderiam ser desativados ou removidos acidentalmente pelos administradores do site. Para uma visão mais profunda, consulte a documentação do Codex

Primeiro, retornar verdadeiro através do filtro automático_updater_disabled tem o mesmo efeito que definir a constante AUTOMÁTICA_UPDATER_DISABLED para verdadeiro em wp-config.php:

add_filter( 'automatic_updater_disabled', '__return_true' );

Podemos controlar qualquer uma das tipologias de atualização através dos filtros auto_update_$type que ativam ou desativam as atualizações dependendo do valor do $type ('core', 'plugin', 'theme' ou 'translation').

Assim, podemos automatizar todas as atualizações do núcleo, retornando verdadeiro através do filtro auto_update_core:

add_filter( 'auto_update_core', '__return_true' );

No exemplo a seguir, estamos ativando atualizações automáticas para temas, plugins e traduções:

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

Nos exemplos acima, apenas habilitamos as atualizações automáticas. No entanto, esses filtros nos fornecem um controle maior sobre as atualizações. No exemplo a seguir, estamos automatizando as atualizações automáticas para dois 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 );

A função callback mantém dois argumentos:

  1. $update: um booleano que define se deve ser atualizado ou não;
  2. $item: o objeto da oferta de atualização.

A função verifica se o item a ser atualizado está no array $plugins, então retorna verdadeiro ou falso de acordo.

Por último, podemos fazer a diferença entre desenvolvimento, pequenas e grandes atualizações, retornando true ou false através dos seguintes 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, uma atualização pode falhar. No pior dos casos, o site pode cair após uma falha de atualização. Mas, felizmente, podemos pedir ao WordPress para nos notificar com um e-mail após qualquer atualização (ou tentativa).

Resultado, notificação e depuração de e-mails

Dependendo do resultado do processo de atualização, o WordPress envia um e-mail diferente para o endereço do administrador:

  • um e-mail de resultado é enviado após uma atualização automática do núcleo;
  • um e-mail de notificação é enviado quando o WordPress não pôde executar uma atualização automática;
  • um e-mail de depuração é enviado em versões de desenvolvimento do WordPress.

Sempre que uma atualização automática tiver sucesso ou falhar, o WordPress envia um e-mail de resultado ou notificação com um dos seguintes assuntos:

  • Seu site foi atualizado para WordPress XXX (sucesso no caso)
  • O WordPress XXX está disponível. Por favor, atualize! (a atualização falhou e é necessária uma atualização manual: caso falhe)
  • URGENTE: Seu site pode estar em baixa devido a uma atualização falhada (atualização falhada e WordPress pode estar em baixa: caso crítico)

O filtro auto_core_update_send_send_mail controla os e-mails de resultado e de notificação. Estes e-mails podem ser desativados devolvendo false como se segue:

apply_filters( 'auto_core_update_send_email', '__return_false' );

Especialmente se você estiver planejando estender as atualizações automáticas às principais versões do núcleo e/ou tema e plugins, você pode preferir deixar os e-mails de resultado e notificação ativados ou personalizá-los dependendo do resultado ou da tipologia de atualização. No exemplo a seguir, o WordPress não enviará o e-mail de resultado em caso de sucesso:

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 );

A função de chamada de retorno mantém os seguintes argumentos:

  • $send é um booleano que determina se enviar um resultado ou e-mail de notificação;
  • $type é uma string que define o tipo de e-mail a ser enviado (sucesso, falha ou crítico);
  • $core_update é o objeto da oferta de atualização;
  • $result é o resultado para a atualização do núcleo (pode ser um WP_Error).

Por padrão, os administradores são notificados quando a oferta de atualização recebida do WordPress.org define uma determinada flag e a instalação é incapaz de atualizar. O e-mail de notificação será enviado apenas uma vez por lançamento. O filtro send_core_update_notification_email permite alguma discrição sobre se e quando enviar este tipo de notificações. Aplique o filtro da seguinte forma:

apply_filters( 'send_core_update_notification_email', '__return_true' );

Finalmente, o filtro automatic_updates_send_debug_email controla os e-mails de depuração, que fornecem informações de registo úteis sobre as atualizações efetuadas. Por padrão, estes e-mails são enviados por instalações de desenvolvimento. O retorno de e-mails falsos impedirá que o WordPress envie e-mails de depuração, enquanto o retorno de e-mails verdadeiros permitirá que esses e-mails sejam enviados mesmo em instalações estáveis:

apply_filters( 'automatic_updates_send_debug_email', '__return_true' );

Quando e por que desativar as atualizações automáticas do WordPress

O processo de atualização automática é uma ótima funcionalidade para muitos usuários, pois eles podem economizar muito tempo e trabalho.
Mas mesmo que pareça que as atualizações automáticas são realmente seguras, devemos nos perguntar se é sempre uma boa ideia habilitar todas elas.

Ocasionalmente, podemos ter problemas de incompatibilidade em temas e plugins que podem interromper algumas funcionalidades ou até quebrar o site. Se o site depende de um bom número de plugins, pode ser mais seguro realizar atualizações manuais, pelo menos para plugins. O processo um a um permite-nos detectar rapidamente problemas que a automação tornaria difícil de encontrar.

Além disso, se você é um desenvolvedor, você deve ter cuidado com os nomes que escolher para seus temas e plugins, mesmo que você não esteja planejando distribuí-los. Ao executar atualizações, o WordPress procura no diretório de plugins por novas versões de seus plugins e sobrescreve seus arquivos se for encontrado um plugin com o mesmo nome. Portanto, se você considera habilitar atualizações em segundo plano para temas e plugins, certifique-se de definir nomes únicos para seus scripts.

Sim, isso é ótimo para os desenvolvedores. Mas como um utilizador não desenvolvedor pode gerenciar atualizações automáticas?

Controle as atualizações automáticas do WordPress com plugins

Se você não é um desenvolvedor, você pode controlar as atualizações automáticas do WordPress usando um plugin.

O Easy Updates Manager permite aos utilizadores administrativos controlarem as atualizações do WordPress tanto nas instalações de um único site como nas instalações de vários sites. O plugin permite gerenciar todas as tipologias de atualizações do WordPress, e Temas e plugins podem ser selecionados individualmente para atualizações automáticas. Recursos adicionais relacionados a e-mails de notificação, bloqueio de usuários e atualizações de plugins de registro.

Easy Updates Manager
Easy Updates Manager

Em caso de incompatibilidade, pode ser necessário reverter rapidamente para uma versão anterior de um tema ou plugin. WP Rollback permite restaurar uma versão anterior de quaisquer temas e plugins instalados a partir da tela Plugins. Basta clicar no link Rollback e o plugin irá mostrar uma lista de todas as versões disponíveis.
Infelizmente, WP Rollback não será de ajuda se o seu site cair, por isso não se esqueça de fazer backup e ler cuidadosamente a documentação on-line.

WP Rollback
WP Rollback

Finalmente, se você precisar de um teste de compatibilidade em atualizações automáticas em sua instalação do WordPress, o Testador de atualizações em segundo plano fornecerá as informações necessárias.

Atualizações automáticas para plugins e temas premium

Como desenvolvedor de plugins ou temas WordPress premium, é seu dever integrar um mecanismo de atualizações automáticas em seus produtos para oferecer a mesma experiência de atualização contínua que os usuários esperam com os produtos WordPress.org. Isso se tornou o padrão do mercado atual (por uma boa razão). Você mesmo pode hospedar os produtos premium e desenvolver um mecanismo de atualizações, ou aproveitar plataformas como Freemius, Kernl, ou WP Updates, que oferecem um repositório seguro e atualizações automáticas como um serviço, out-of-the-box.

Resumo

As atualizações automáticas do WordPress são uma excelente funcionalidade que nos pode poupar muito tempo e trabalho, e que nos permite manter o nosso site regularmente atualizado. Mas você ativaria todo tipo de atualização? Informe-nos nos comentários abaixo.

Carlo Daniele Kinsta

Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.