0
36

SHARE

Atualizações Automáticas de Plugin WordPress via GitHub

Atualizações Automáticas via GitHub.

Aprenda como implementar atualizações automáticas para plugins WordPress diretamente via GitHub com uma arquitetura profissional. Parte 13/15 da série.
Este post é a parte 14 de 15 da Série WordPress Extremo: Arquitetura e Engenharia de Plugins

Fala, pessoal! 👋
Aqui é o Asllan Maciel novamente – e hoje o papo é sobre algo que pouca gente implementa direito: um sistema profissional de atualizações automáticas de plugins direto do GitHub.

Se você está criando um plugin sério – seja pra vender, distribuir gratuitamente ou apenas manter no seu próprio ecossistema – permitir que o usuário atualize facilmente com um clique é essencial.

Hoje vamos implementar isso do jeito certo, sem gambiarra.
Bora evoluir? 😎


🧠 Por que um sistema de atualização automática?

Atualizar seu plugin via GitHub traz vantagens como:

✅ Usuário recebe melhorias e correções rapidamente
✅ Você evita lidar com zip manual e FTP
✅ Ajuda no controle de versões e distribuições privadas
✅ Dá um toque de profissionalismo REAL ao seu projeto


📦 Estrutura que já temos

Nos últimos posts, estruturamos bem o plugin:

src/
├── Admin/
│   └── SettingsPage.php
├── Services/
│   ├── HelloService.php
│   ├── LogService.php
├── Helpers/
│   └── PermissionHelper.php
├── Repositories/
├── Commands/
├── Hooks/
│   └── Init.php

Agora, vamos adicionar o sistema de atualização automática no plugin.


🔄 Como funciona a mágica? GitHub Updater via API

O WordPress, por padrão, só busca atualizações no repositório oficial, então precisamos enganá-lo de maneira controlada, criando um hook que:

  1. Informa ao WordPress que existe uma nova versão
  2. Aponta para o .zip da nova versão do plugin no GitHub
  3. Faz o processo automático quando o usuário clicar em “Atualizar”

🛠️ Passo a passo para ativar atualizações via GitHub

1. 📁 Crie o arquivo GitHubUpdater.php em src/Services/

namespace WpArquiteturaExtrema\Services;

class GitHubUpdater
{
    private $plugin_file;
    private $repo_api_url;
    private $zip_url;
    private $version;

    public function __construct()
    {
        $this->plugin_file = plugin_basename(WP24H_PLUGIN_FILE);
        $this->repo_api_url = 'https://api.github.com/repos/SEU_USUARIO/SEU_REPOSITORIO/releases/latest';
        $this->zip_url = 'https://github.com/SEU_USUARIO/SEU_REPOSITORIO/archive/refs/tags/v1.0.0.zip'; // atualize conforme versão
        $this->version = '1.0.0'; // mesma versão do seu plugin
    }

    public function register()
    {
        add_filter('pre_set_site_transient_update_plugins', [$this, 'check_update']);
        add_filter('plugins_api', [$this, 'plugin_info'], 10, 3);
    }

    public function check_update($transient)
    {
        if (empty($transient->checked)) return $transient;

        $response = [
            'slug' => dirname($this->plugin_file),
            'new_version' => $this->version,
            'url' => '',
            'package' => $this->zip_url,
        ];

        $transient->response[$this->plugin_file] = (object) $response;

        return $transient;
    }

    public function plugin_info($result, $action, $args)
    {
        if ($action !== 'plugin_information') return $result;
        if ($args->slug !== dirname($this->plugin_file)) return $result;

        return (object) [
            'name' => 'WP Arquitetura Extrema',
            'version' => $this->version,
            'download_link' => $this->zip_url,
            'sections' => [
                'description' => 'Atualizações automáticas via GitHub.',
                'changelog' => 'Versão 1.0.0: Estrutura inicial com atualização.',
            ],
        ];
    }
}

2. 🧩 Instancie o GitHubUpdater no Init.php

use WpArquiteturaExtrema\Services\GitHubUpdater;

public function init_plugin()
{
    (new GitHubUpdater())->register();
    // outros services...
}

📝 Dicas de versão e empacotamento

  • Sempre use tags sem o prefixo “v” se não configurar no código
  • Seu plugin deve estar no formato .zip no GitHub Releases
  • Mantenha o readme.txt atualizado para referência

✅ Resultado Final

Quando o WordPress verificar por atualizações, ele verá a nova versão disponível no GitHub e oferecerá o botão de “Atualizar agora” direto no painel.

Simples, profissional e eficaz. 🧠


🔁 Reaproveitamento na nossa arquitetura

Este GitHubUpdater foi criado como um Service desacoplado. Isso significa que você pode:

  • Usá-lo em outros plugins só mudando a URL e versão
  • Testar de forma isolada
  • Ativar ou desativar dinamicamente (como um feature flag)

🔚 Conclusão

Gerar atualizações automáticas a partir do GitHub é um divisor de águas pra projetos WordPress sérios.

Se você está acompanhando essa série desde o começo, olha o nível que estamos chegando! Arquitetura sólida, logs, configurações, segurança… e agora infraestrutura de distribuição!

No próximo post, vamos falar sobre Integrações com APIs Externas — e como arquitetar isso com qualidade.

Nos vemos no próximo dia! 🚀

Navegação<< Separação Clara de Camadas: Core, Domain e InfraChecklist Final de Publicação: WordPress.org e Produção >>

Não perca mais nenhuma atualização aqui!

Ative as Notificações!

Clique aqui e, em seguida, clique em Permitir na caixa que aparecerá na parte superior da janela, próximo à barra de endereços.

Torne-se um Assinante e Eleve seu Conhecimento do WordPress!

Acesso Exclusivo, Suporte Especializado e Muito Mais.

Se você está aproveitando nosso conteúdo gratuito, vai adorar os benefícios exclusivos que oferecemos aos nossos assinantes! Ao se tornar um assinante do WP24Horas, você terá acesso a:

Não perca a oportunidade de maximizar seu potencial no WordPress. Clique no botão abaixo para se tornar um assinante e leve suas habilidades ao próximo nível!

Não perca mais nenhuma atualização aqui!

Tabela de Conteúdo
PUBLICIDADE
Últimos Posts
Como Carregar Scripts e Estilos no WordPress Apenas Quando Necessário

Scripts e Estilos Condicionais: Carregando apenas quando necessário

Internacionalização de Blocos Gutenberg (i18n)

Internationalização de Blocos Gutenberg (i18n)

Como Criar Blocos Condicionais no Gutenberg com Atributos

Como Criar Blocos Condicionais no Gutenberg com Atributos

Comunicação entre Blocos com Block Context API no WordPress

Comunicação entre Blocos com Block Context API no WordPress

Blocos Reutilizáveis com InnerBlocks no Gutenberg

Blocos Reutilizáveis com InnerBlocks no Gutenberg

Como Salvar Dados Personalizados no WordPress Usando Blocos Gutenberg e REST API

Salvando Dados Personalizados no Backend via REST API

Você precisa estar logado para ver esta informação.

Torne-se um Assinante e Eleve seu Conhecimento do WordPress!

Acesso Exclusivo, Suporte Especializado e Muito Mais.

Se você está aproveitando nosso conteúdo gratuito, vai adorar os benefícios exclusivos que oferecemos aos nossos assinantes! 

Não perca a oportunidade de maximizar seu potencial no WordPress. Clique no botão abaixo para se tornar um assinante e leve suas habilidades ao próximo nível!