Executando verificação de segurança...
2

Usando Claude Code para criar um plugin WordPress para tradução em 2 dias

Queríamos publicar versões em português dos posts em inglês do blog de engenharia da Codeminer42.

Fiz uma pesquisa e encontre o Polylang que parecia uma alternativa promissora. Instalei o Polylang e me arrependi logo em seguida. Todos os nossos links estavam retornando erro 404.

Depois de umas pesquisas vi que essa era o comportamento "normal". Quando acontecia, você tinha que ir na configuração de permalinks e só clicar em salvar, sem ter que fazer nada.

Bom tentei, mais algumas vezes fazer funcionar no nosso ambiente, mas não consegui. E piorou ainda mais quando vi que a integração com IA ficava atrás de um paywall. Mesmo que eu configurasse o plugin correntamente, não tínhamos plano de ter uma versão pro só pra traduzir com IA.

Foi aí que pensei: por que não implementar o nosso próprio plugin usando Claude Code?

Resultado

Em dois dias de desenvolvimento:

  • 14 classes e 1.581 linhas de PHP
  • Zero tabelas customizadas no banco de dados
  • 156 testes PHPUnit
  • 323 assertions
  • ~80% de cobertura de testes na parte core

Tudo funcionando com WordPress primitivos: taxonomia cm_language para marcar posts com seu idioma, post meta _cm_translation_group com UUID compartilhado para ligar traduções, e um padrão provider para backends de tradução com IA.

Dia 1: Arquitetura

Fiz brainstorm com o Claude Code para encontrar uma solução que tivesse menos fricção. Não queria criar mais um plugin que quebra as coisas quando é ativado. Também queria que fosse seguro e simples de desinstalar.

Orientei ao Claude Code que fizesse TDD e ele seguiu bem o processo. Os testes cobrem:

  • Configuração de idioma com suporte a idioma padrão
  • Linking de traduções (bidirecional, baseado em UUID)
  • Todos os três provedores de tradução com HTTP mocking
  • Reescrita de URL com prefixos de idioma
  • Geração de tags hreflang
  • REST API com filtragem por idioma

Arquitetura do plugin

Dia 2: Testes reais e bugs

No segundo dia de trabalho no plugin, pedi ao Claude Code que configurasse uma instalação do Wordpress com o mesmo tema que usamos em produção e, usando o Chrome DevTools MCP, pedi que fizesse a instalação e configuração do plugin. Tudo funcionou perfeitamente.

Em produção é que certas coisas deram errado. Primeiro que na instalação de produção, não é editor Gutenberg, mas sim o clássico. Isso foi mais uma coisas que tive de ajustar no plugin, fazer ele funcionar no editor clássico.

Tive bugs também na exibição dos posts. Meu plugin acabou alterando a query da home page.

Houve mais algumas idas e vindas que com a junção Claude Code + Chrome DevTools MCP eu pude validar e encontrar com mais rapidez.

O Fluxo de tradução

No fim de tudo, funcionou. E o fluxo está como mostrado na imagem abaixo.

Fluxo de tradução de posts

  1. Autor clica "Translate with AI" em um post em inglês
  2. Plugin adquire um lock (baseado em transient, 5 min TTL) para evitar traduções duplicadas
  3. Plugin envia título e conteúdo separadamente para o provedor de IA configurado
  4. Provedor retorna as traduções
  5. Plugin cria um novo draft post com o conteúdo traduzido
  6. Posts são linkados bidireccionalmente via UUID

IMPORTANTE: O prompt importa mais do que o provedor que você escolhe. Enviamos regras de formatação (preserve Markdown, não converta blocos de código em parágrafos, mantenha backticks) e regras de linguagem (não infle, não use linguagem promocional, não force a regra dos três).

AI tende a derivar. "Isto está quebrado" vira "isto representa um desafio significativo." Essas regras mantêm a tradução honesta.

O post completo, traduzido para o português já utilizando o plugin, com todos os detalhes está aqui: https://blog.codeminer42.com/pt-br/construindo-um-plugin-wordpress-multilingue-com-claude-code/.

E se quiser ver como o Chrome DevTools pode te ajudar sugiro que veja esse follow up que mostra como foi configurar o plugin de ponta a ponta sem tocar no browser eu mesmo: https://blog.codeminer42.com/pt-br/configurei-um-plugin-do-wordpress-sem-tocar-no-navegador/

Carregando publicação patrocinada...