# Como corrigir Publishing failed / Updating failed (REST API)

A falha ao publicar no WordPress (Publishing failed / Updating failed) acontece quando o editor de blocos não consegue falar com a REST API. O Gutenberg salva o post por uma chamada à REST API em /wp-json/; quando essa rota é bloqueada ou responde algo diferente de JSON, o editor exibe o erro mesmo com o conteúdo correto.

## O que é a falha ao publicar pela REST API?

A falha ao publicar pela REST API do WordPress é o erro "Publishing failed" (ou "Updating failed") do editor de blocos. O Gutenberg não envia o post por um formulário tradicional: ele faz uma requisição AJAX para a REST API em /wp-json/wp/v2/posts. Se essa rota responde 403, 404, redireciona ou devolve HTML em vez de JSON, o editor não consegue confirmar o salvamento e mostra a falha, ainda que o texto digitado esteja certo.

## Como identificar

- Mensagem "Publishing failed. The response is not a valid JSON response." ao clicar em Publicar.
- Mensagem "Updating failed." ao tentar atualizar um post existente.
- Ao abrir /wp-json/ no navegador, aparece um 403, um 404 ou uma página de HTML em vez de JSON.
- O Editor Clássico salva normal, mas o editor de blocos (Gutenberg) falha em todo post.

**Antes de começar:** Não desative a REST API por completo para resolver: o editor de blocos, o app móvel e várias integrações dependem dela. Bloqueie apenas endpoints sensíveis (como o de usuários) e mantenha o restante funcionando.

## Como prevenir

- Sempre que ativar um firewall ou WAF, confirme que a rota /wp-json/ continua liberada para usuários logados
- Mantenha siteurl, home e o certificado SSL consistentes (mesmo domínio e mesmo HTTPS) para a REST API não redirecionar
- Verifique a REST API em Ferramentas > Saúde do Site após cada atualização grande de plugin de segurança ou SEO

Erros relacionados

- [Como corrigir o editor de blocos (Gutenberg) que não carrega](https://full.services/wp-fixer/corrigir-gutenberg-nao-carrega-wordpress/)
- [Como corrigir o erro 403 Forbidden no WordPress](https://full.services/wp-fixer/como-corrigir-erro-403-wordpress/)
- [Como identificar conflito de plugins no WordPress](https://full.services/wp-fixer/identificar-conflito-de-plugins-wordpress/)

## Causa

- Plugin de segurança ou firewall (WAF) bloqueando a rota /wp-json/ da REST API.
- Regra de .htaccess ou permalink quebrado fazendo /wp-json/ retornar 404 em vez do JSON.
- Plugin de SEO ou de privacidade desativando a REST API para usuários logados.
- URL do site (siteurl/home) ou certificado SSL inconsistente, gerando redirecionamento na chamada REST.
- Erro fatal de PHP em outro plugin que injeta um aviso (warning/notice) antes do JSON, invalidando a resposta.

## Como resolver

1. Teste a REST API: abra https://seusite.com/wp-json/ no navegador. Se não aparecer um JSON, a rota está bloqueada ou quebrada: esse é o ponto a corrigir.
2. Use a Saúde do Site: vá em Ferramentas > Saúde do Site. O WordPress avisa explicitamente quando a REST API não está acessível e mostra o código de status retornado.
3. Regenere os permalinks: em Configurações > Links permanentes, clique em Salvar alterações. Isso reescreve o .htaccess e costuma destravar o /wp-json/ que retornava 404.
4. Desative o firewall/segurança: via FTP, renomeie a pasta do plugin de segurança em wp-content/plugins. Se a publicação voltar, libere a rota /wp-json/ na configuração dele antes de reativar.
5. Procure saída antes do JSON: ligue o WP_DEBUG_LOG e veja em wp-content/debug.log se algum plugin emite warning/notice. Esse texto sai antes do JSON e quebra a resposta da REST API.

## Código

```php
// functions.php do tema-filho — força a REST API a usar a mesma URL/HTTPS do site
// Evita o redirecionamento que faz o Gutenberg receber HTML em vez de JSON.
add_filter( 'rest_url', function ( $url ) {
    return set_url_scheme( $url, is_ssl() ? 'https' : 'http' );
} );

// Confirma que a REST API nao foi desativada por outro plugin para quem esta logado.
add_filter( 'rest_authentication_errors', function ( $result ) {
    if ( true === $result || is_wp_error( $result ) ) {
        return $result;
    }
    return $result; // mantem o comportamento padrao, sem bloquear logados
} );
```

## Perguntas frequentes

### O que significa The response is not a valid JSON response?

Significa que o editor de blocos pediu o salvamento à REST API e recebeu algo que não é JSON: um erro 403/404, um redirecionamento ou HTML. O Gutenberg precisa de JSON puro para confirmar a publicação, então qualquer outra coisa vira a falha.

### Por que o Editor Clássico pública mas o Gutenberg não?

Porque o Editor Clássico salva por um formulário tradicional (admin-post), enquanto o Gutenberg usa a REST API. Se só o editor de blocos falha, o problema está na rota /wp-json/, não no conteúdo do post.

### Como sei se a REST API está bloqueada?

Abra https://seusite.com/wp-json/ no navegador. Se vier um JSON com rotas, está funcionando. Se vier 403, 404 ou uma página HTML, a REST API está bloqueada ou quebrada. A tela Saúde do Site também avisa.

### Um plugin de segurança pode causar a falha ao publicar?

Sim, é uma das causas mais comuns. Muitos firewalls bloqueiam /wp-json/ por padrão para reduzir exposição. Libere a rota para usuários logados na configuração do plugin em vez de desligar a REST API inteira.

### Regenerar permalinks resolve a falha ao publicar?

Em muitos casos sim. Quando o /wp-json/ retorna 404, costuma ser .htaccess com regras de reescrita ausentes. Salvar em Configurações > Links permanentes reescreve o arquivo e restaura a rota da REST API.

### Posso desativar a REST API para parar o erro?

Não é recomendado. O editor de blocos, o app do WordPress e várias integrações dependem da REST API. Desativá-la troca um problema por vários. Corrija a rota bloqueada e mantenha a API ativa.

**Fonte:** [WordPress REST API Handbook — developer.wordpress.org](https://developer.wordpress.org/rest-api/)
