Como Automatizar a Publicação no WordPress com PHP e REST API
- #PHP
- #Automação
Automatizar a publicação de conteúdo no WordPress pode economizar tempo e, principalmente, reduzir erros em processos repetitivos.
Quando um projeto começa a publicar conteúdo com frequência, tarefas aparentemente simples — criar o post, definir categorias, enviar imagens, preencher textos alternativos, programar a publicação e verificar o resultado — começam a consumir bastante tempo.
Uma alternativa é utilizar a WordPress REST API para transformar essas etapas em um fluxo automatizado.
Neste artigo, mostro uma arquitetura prática utilizando PHP, WordPress REST API e tarefas agendadas.
## Por que automatizar a publicação no WordPress?
Publicar manualmente funciona muito bem para projetos pequenos. O problema aparece quando existe um processo repetitivo.
Imagine um fluxo como este:
1. preparar o conteúdo;
2. organizar título e slug;
3. enviar imagens;
4. definir categorias e tags;
5. criar o post;
6. programar a publicação;
7. verificar se o post foi publicado corretamente;
8. registrar possíveis erros.
Cada etapa depende da anterior.
Em vez de executar tudo manualmente, podemos criar um pipeline em PHP responsável por coordenar essas tarefas.
A arquitetura pode ser representada de forma simples:
Conteúdo
↓
Validação
↓
Upload das imagens
↓
WordPress REST API
↓
Criação do post
↓
Agendamento
↓
Verificação
↓
Logs e alertas
O ponto mais importante é não tratar a automação apenas como um script que envia conteúdo ao WordPress.
Um bom pipeline também precisa validar o que aconteceu depois.
## A WordPress REST API
O WordPress disponibiliza uma REST API que permite consultar e manipular diversos recursos do site.
Para posts, por exemplo, encontramos o endpoint:
/wp-json/wp/v2/posts
Com uma requisição autenticada, podemos criar um post enviando informações como:
- título;
- conteúdo;
- status;
- slug;
- categorias;
- tags;
- imagem destacada.
Em PHP, uma estrutura simplificada pode ser construída com cURL.
Exemplo:
$payload = [
'title' => 'Título do artigo',
'content' => '<p>Conteúdo do artigo</p>',
'status' => 'draft'
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://exemplo.com/wp-json/wp/v2/posts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
],
CURLOPT_POSTFIELDS => json_encode($payload)
]);
$response = curl_exec($ch);
curl_close($ch);
Esse exemplo é propositalmente simples. Em produção, ainda precisamos adicionar autenticação, tratamento de erros, timeouts e validações.
## Autenticação
Uma das opções disponíveis no WordPress é utilizar Application Passwords.
Isso permite criar uma credencial específica para uma integração sem utilizar diretamente a senha principal da conta.
A credencial nunca deve ficar escrita diretamente em um repositório público.
Uma abordagem melhor é utilizar variáveis de ambiente ou outro mecanismo seguro de configuração.
Por exemplo:
WP_URL=https://exemplo.com
WP_USER=usuario
WP_APP_PASSWORD=senha_da_aplicacao
O script pode carregar essas informações apenas durante a execução.
Além disso, a comunicação deve utilizar HTTPS.
## Criando o post como rascunho
Em uma automação real, normalmente prefiro criar o conteúdo inicialmente como draft ou future em vez de publicá-lo imediatamente.
Isso cria uma camada adicional de segurança.
Um payload pode ser semelhante a:
$payload = [
'title' => $title,
'slug' => $slug,
'content' => $content,
'status' => 'draft'
];
Depois da resposta da API, o script deve verificar o código HTTP e também confirmar se o WordPress retornou um ID válido para o post.
Não basta verificar se curl_exec() retornou alguma coisa.
Uma resposta inesperada também precisa interromper o pipeline.
## Upload automático de imagens
A mesma REST API também pode ser utilizada para enviar arquivos para a biblioteca de mídia.
O endpoint é:
/wp-json/wp/v2/media
Depois do upload, o WordPress retorna informações sobre o arquivo, incluindo seu ID.
Esse ID pode ser utilizado como imagem destacada ou dentro do conteúdo.
Uma automação mais completa pode executar:
Imagem local
↓
Upload para /media
↓
Receber ID
↓
Adicionar ALT
↓
Associar ao post
Isso evita uma situação comum em automações: publicar o artigo corretamente, mas esquecer metadados importantes das imagens.
## Texto alternativo também pode ser automatizado
Depois do upload da mídia, é possível atualizar informações associadas ao arquivo.
Por exemplo, o pipeline pode armazenar previamente:
nome do arquivo;
texto alternativo;
posição da imagem;
ID retornado pelo WordPress.
Dessa forma, cada imagem continua relacionada ao contexto para o qual foi criada.
Esse detalhe é especialmente útil quando o sistema trabalha com várias imagens por publicação.
## Categorias e tags
Outro problema aparece quando o conteúdo utiliza categorias ou tags que ainda não existem.
Uma estratégia possível é:
1. consultar a categoria;
2. verificar se ela já existe;
3. reutilizar o ID existente;
4. criar a categoria apenas quando necessário;
5. utilizar o ID no payload do post.
O mesmo conceito pode ser aplicado às tags.
Isso é melhor do que criar taxonomias duplicadas a cada execução.
## Agendamento de publicação
Depois de validar o conteúdo, podemos programar o WordPress para publicar o artigo posteriormente.
Nesse caso, o post utiliza o status:
future
e recebe uma data de publicação.
Por exemplo:
$payload = [
'status' => 'future',
'date' => '2026-09-05T09:00:00'
];
Aqui existe um detalhe importante: timezone.
O servidor, o PHP e o WordPress podem estar utilizando fusos horários diferentes.
Por isso, antes de automatizar agendamentos, vale confirmar explicitamente qual timezone cada componente utiliza.
Caso contrário, um artigo planejado para as 09:00 pode ser publicado em outro horário.
## Não deixe a automação criar uma fila infinita
Esse é um problema interessante que aparece em sistemas agendados.
Imagine que o cron executa todos os dias e cria um novo post futuro.
Se algum problema impedir a publicação anterior, o sistema pode continuar adicionando novos posts à fila.
Depois de alguns dias, haverá vários artigos agendados sem que ninguém perceba.
Uma proteção simples é consultar o WordPress antes de gerar outro conteúdo.
Por exemplo:
0 posts futuros → continuar
1 post futuro → situação normal, não criar outro
2 ou mais posts futuros → interromper e gerar alerta
Esse pequeno guard transforma um script simples em um processo muito mais seguro.
## Logs são parte da automação
Um pipeline sem logs é difícil de manter.
Cada etapa importante deve registrar pelo menos:
- horário;
- operação executada;
- resultado;
- código HTTP;
- ID do post, quando existir;
- mensagem de erro.
Um log simples pode mostrar:
[06:30:02] Iniciando pipeline
[06:30:04] Conteúdo validado
[06:30:09] Imagens enviadas
[06:30:12] Post criado: ID 123
[06:30:13] Publicação agendada
[06:30:14] Pipeline concluído
Quando algo falha durante a madrugada, esse histórico reduz bastante o tempo necessário para descobrir o problema.
## Alertas também ajudam
Além dos logs, é possível integrar o pipeline com serviços de notificação.
Telegram, Slack ou e-mail podem informar situações como:
- falha na API;
- erro no upload de uma imagem;
- publicação não encontrada;
- fila de posts acima do esperado;
- execução concluída com sucesso.
O objetivo não é receber uma mensagem para cada pequena operação.
O ideal é alertar apenas quando existe algo que realmente exige atenção.
## Um exemplo de aplicação real
Tenho aplicado esse tipo de arquitetura em projetos WordPress que precisam combinar publicação, imagens, agendamento e verificações automáticas.
Um desses projetos é o Radar Apostas Brasil:
Nesse caso, o interessante do ponto de vista técnico não é o tema editorial do site, mas o pipeline utilizado por trás dele.
O fluxo combina PHP, WordPress REST API, processamento de conteúdo, gerenciamento de imagens, agendamento, verificações de estado e alertas.
A experiência mostrou que a parte mais importante da automação não é simplesmente conseguir publicar um post via API.
É conseguir detectar quando alguma etapa não aconteceu como deveria.
## Algumas práticas que considero importantes
Depois de trabalhar com esse tipo de fluxo, algumas regras se tornaram especialmente úteis:
- nunca armazenar credenciais em código público;
- utilizar HTTPS;
- validar respostas HTTP;
- registrar logs;
- evitar loops de tentativa sem limite;
- verificar o estado do WordPress antes de criar novos posts;
- manter backups antes de alterar scripts de produção;
- separar geração, publicação e verificação em etapas;
- testar mudanças antes de colocá-las no cron.
Essas medidas parecem pequenas isoladamente.
Juntas, tornam o sistema muito mais previsível.
## Automação não significa ausência de controle
Existe uma diferença importante entre automatizar uma tarefa e simplesmente executá-la sem supervisão.
Uma automação robusta precisa saber quando continuar e, principalmente, quando parar.
Esse princípio pode ser aplicado não apenas ao WordPress, mas a praticamente qualquer integração entre APIs.
O fluxo ideal não é:
executar → executar → executar
Mas:
executar → validar → decidir → registrar
## Conclusão
A WordPress REST API permite transformar tarefas repetitivas de publicação em um pipeline controlado por código.
Com PHP, é possível automatizar desde a criação de posts até upload de mídia, taxonomias, agendamento e verificações posteriores.
Mas a maior evolução acontece quando adicionamos mecanismos de segurança ao processo.
Logs, validações, limites de tentativa, controle de fila e alertas tornam a automação muito mais confiável.
No final, uma boa automação não é aquela que simplesmente executa muitas tarefas sozinha.
É aquela que consegue executar o processo esperado, identificar situações anormais e parar com segurança quando algo dá errado.
