Atualize o WP Rocket para 3.23.2.2 antes do WordPress 7.1
PT-PT

Atualize o WP Rocket para 3.23.2.2 antes do WordPress 7.1

Última verificação: 1 de setembro de 2026
14 min de leitura
Notícias
500+ projetos WP
Auditor de segurança

A WPPoland (Mariusz Szatkowski) atualiza o WP Rocket para 3.23.2.2 em staging antes do WordPress 7.1. As versões 3.23.2.1 e anteriores dão erro fatal em todos os pedidos: Uncaught TypeError: substr(): Argument #1 ($string) must be of type string, int given em Cloudflare.php:562. O relatório no GitHub chegou a 6 de julho de 2026. O WordPress 7.1 Mary Lou saiu a 19 de agosto. A correção do plugin saiu a 20 de agosto. Plugin primeiro, núcleo depois.

#O que falhou

Atualizou para o WordPress 7.1 e o site ficou em ecrã branco. O wp-admin está em baixo. O admin-ajax está em baixo. A REST está em baixo. O WP-CLI morre com o mesmo stack. O registo PHP repete uma linha em todos os pedidos:

PHP Fatal error: Uncaught TypeError: substr(): Argument #1 ($string) must be of type string, int given in .../wp-rocket/inc/ThirdParty/Plugins/CDN/Cloudflare.php:562

A Wordify reproduziu o caso de ponta a ponta num site de teste e publicou o stack a 20 de agosto de 2026. O erro fatal dispara no init, enquanto o WordPress ainda está a arrancar, por isso a frente e o painel morrem juntos. Ligar o WP_DEBUG nem sempre imprime nada no ecrã. O sítio fiável é o registo de erros.

Isto é um erro do WP Rocket, não um erro do alojamento, e não é “o WordPress 7.1 está partido.” Sites sem WP Rocket não apanharam este TypeError. Sites no WP Rocket 3.23.2.2 também não. A linha do changelog é: “Fixed the Fatal Type Error appearing after update to WordPress Core 7.1 in some configurations.”

O caminho de código vive no módulo de compatibilidade Cloudflare. Não precisa de uma zona Cloudflare para ele correr. A Wordify foi explícita: o módulo corre em todos os pedidos, esteja ou não o plugin Cloudflare instalado.

#Três peças inofensivas sozinhas

O WordPress 7.1 mudou a forma como os IDs de callback dos hooks são construídos. O ticket Trac 65919 é a alteração no núcleo. Até ao 7.0.x, _wp_filter_build_unique_id() usava spl_object_hash(), uma string hexadecimal de 32 caracteres. O 7.1 passou para spl_object_id(), um inteiro pequeno convertido para string. David Levine, da rtCamp, apontou mais tarde para o mesmo ticket quando a conta oficial do WordPress no X disse “this wasn’t a bug in 7.1.” O TypeError está no plugin. O tipo da chave mudou no núcleo. As duas afirmações podem ser verdadeiras.

O PHP depois guarda chaves de string numéricas como inteiros. Quando "5292" entra como chave de array em $wp_filter, o PHP guarda-a como 5292. Depois do 7.1, uma closure ligada a uma action tem uma chave inteira. Antes do 7.1, todas as chaves eram strings.

O WP Rocket assume que essas chaves são strings, com strict_types=1 no Cloudflare.php. No init percorre os callbacks de deleted_post e transition_post_status e chama substr() em cada chave. Os tipos estritos recusam converter o inteiro. Erro fatal.

A Wordify publicou o ciclo:

foreach ( $original_wp_filter[ $priority ] as $key => $config ) {
    if ( substr( $key, - strlen( $method ) ) !== $method ) {

Um WordPress limpo mais o WP Rocket muitas vezes sobrevive. Austin Ginder encontrou isso. Acrescente um plugin que liga uma closure a deleted_post na prioridade 10, ou a transition_post_status em PHP_INT_MAX, e o pedido seguinte morre. O Elementor Pro é o exemplo generalizado. O Contact Form 7 Redirection é outro. O segundo plugin não está a fazer nada de errado. Ligar uma closure é WordPress normal.

Matt Cromwell notou a ironia no X: a alteração no núcleo era uma melhoria de desempenho, que é o produto que o WP Rocket vende.

#O relatório de seis semanas no GitHub

A issue 8596 do wp-media/wp-rocket foi aberta a 6 de julho de 2026, durante a beta do 7.1. O relatório nomeava o TypeError e sugeria um cast de string de uma linha. The Repository, a 21 de agosto: o WP Rocket reviu-a no mesmo dia, o QA não conseguiu reproduzi-la nos testes automatizados, e a issue caiu. Nunca teve dono atribuído.

O WordPress 7.1 saiu a 19 de agosto de 2026, dia de encerramento da WordCamp US em Phoenix. Ginder publicou no mesmo dia: os sites WP Rocket da frota Anchor Hosting ficaram offline depois do salto para o 7.1. Corrigiu o plugin à mão para os trazer de volta.

Mais duas issues no GitHub, 8740 e 8741, chegaram no dia a seguir ao lançamento. O WP Rocket publicou um aviso: não atualize para o 7.1 até haver correção, com um artigo de suporte em docs.wp-rocket.me/article/1927. Mais tarde, a 20 de agosto, lançaram a 3.23.2.2, o cast de uma linha do relatório de julho. A Wordify verificou a correção no mesmo crash que tinha voltado a montar na 3.23.2.1.

O pull no GitHub é wp-media/wp-rocket#8745.

#Quem ficou em baixo

Os números da frota de Ginder, a 20 de agosto: 124 de 332 sites de produção a correr WP Rocket em erro fatal, 37 por cento. Todos os erros fatais eram WordPress 7.1 + PHP 8.x + Cloudflare.php.

O post-mortem posterior do WP Rocket, coberto pelo The Repository a 27 de agosto, estimou cerca de 27 por cento da base de utilizadores em risco e cerca de 10 por cento realmente atingidos. O CEO Rémy Lamiot disse que o Elementor Pro, apesar da base instalada e apesar de ser um dos gatilhos, não estava na lista de compatibilidade que testaram. O relatório de julho não tinha dono. “This cost real time and real trust,” escreveu.

Essas duas percentagens não são a mesma medição. Ginder contou uma frota gerida que já corria WP Rocket. O WP Rocket contou a base de utilizadores inteira, incluindo sites que nunca passaram ao 7.1 nessa semana e sites sem o segundo plugin. Cite as duas. Não faça a média.

O primeiro site de cliente da Wordify atualizou o núcleo às 01:55 UTC. O primeiro erro fatal entrou no registo três segundos depois. O suporte desativou o plugin. Cerca de 35 minutos de ponta a ponta, a maior parte em diagnóstico, porque ainda ninguém tinha ligado “7.1” a “WP Rocket.”

Andrew Hoyer escreveu que tinha avisado a equipa sobre o 7.1 e mesmo assim acordou com dezenas de sites partidos. A frase dele: teste alpha, beta e RC no seu próprio stack em vez de confiar no fornecedor. Steve Jones perguntou se as pessoas estavam a atualizar produção na hora em que um major saía, sem rollback. As duas perguntas são o trabalho de um contrato de manutenção. Não são um argumento de marca.

#Ordem segura

Se o site ainda está no WordPress 7.0.x e o WP Rocket é anterior a 3.23.2.2:

  1. Clone para staging.
  2. Atualize o WP Rocket para 3.23.2.2 em staging. Confirme que o wp-admin e uma página frontal sem sessão carregam.
  3. Depois passe ao WordPress 7.1 em staging. Bata no login, no checkout se houver WooCommerce, num formulário, no cron.
  4. Repita a mesma ordem em produção: plugin primeiro, núcleo depois.

Se as atualizações automáticas já levaram o 7.1 e o site está em ecrã branco, não siga a ordem acima. Desative primeiro.

Não reative a 3.23.2.1 no 7.1. O artigo de suporte da WP Media é explícito: se não aparecer atualização na lista de plugins, siga o guia de atualização em falta. Reativar a versão partida deita o site abaixo outra vez.

Builds muito antigas do WP Rocket, anteriores ao ciclo do Cloudflare.php, não são afetadas. A Wordify situou a faixa afetada grosso modo entre 3.16 e 3.23.2.1. Se não tiver a certeza, atualize na mesma para 3.23.2.2. É a versão com o cast de string.

PeçaVersão / dataPapel
WordPress7.1 Mary Lou, 19 Aug 2026Passou os IDs de hook para spl_object_id (Trac 65919)
PHP8.x com strict_types=1 no ficheiro do pluginChave inteira em substr() é TypeError, não um aviso
WP Rocket3.16 até 3.23.2.1Cloudflare.php:562 percorre chaves de hook no init
WP Rocket3.23.2.2, 20 Aug 2026Cast de string de uma linha a partir da GitHub 8596
Plugin gatilhoElementor Pro, CF7 Redirection, outrosClosure em deleted_post ou transition_post_status

Já cobrimos o que o 7.1 realmente entregou, e o que cortou, na nota do roteiro do WordPress 7.1. O editor de artigos em iframe é uma quebra de programador à parte. Os pormenores estão na nota do editor em iframe. Este texto trata só do erro fatal do Rocket.

#Se o wp-admin já está em ecrã branco

Não apague o Cloudflare.php. Wordify: a classe está ligada ao contentor do plugin, e remover o ficheiro troca este erro fatal por outro.

WP-CLI. O WP-CLI carrega plugins, por isso um wp plugin deactivate wp-rocket nu morre. Salte o plugin enquanto o desativa:

wp plugin deactivate wp-rocket --skip-plugins=wp-rocket

SFTP. Mude o nome de wp-content/plugins/wp-rocket para wp-rocket.off. O WordPress trata uma pasta com o nome mudado como desativada no pedido seguinte.

Depois atualize para 3.23.2.2 a partir do wp-admin, que já está vivo outra vez, e reative.

Recuar para 7.0.4 a partir de uma cópia de segurança anterior à atualização também restaura o site. É o caminho mais lento. Deita fora os ficheiros 7.1 que já escreveu em disco. Use-o quando não chega ao SFTP nem ao WP-CLI.

Uma cache de páginas ao nível do alojamento (LiteSpeed, nginx FastCGI, cache Cloudflare de HTML) pode continuar a servir a última página boa a visitantes anónimos enquanto o wp-admin está morto. Isso esconde a interrupção a parte dos clientes e atrasa o ticket. Veja o registo de erros, não só a homepage.

#Como testamos um salto do núcleo

A WPPoland (Mariusz Szatkowski) trata um major como uma verificação em três camadas, não como um evento de calendário.

O staging é um clone, não uma subpasta em produção. O mesmo PHP, a mesma object cache, os mesmos plugins. Primeiro levamos as atualizações de plugin com incompatibilidade conhecida. Para o 7.1 essa lista começou no WP Rocket 3.23.2.2. Depois o núcleo. Depois uma lista de testes de fumo: login, um guardar no editor de artigos (agora sempre em iframe), carrinho e checkout WooCommerce se o site os tiver, um POST de formulário, uma corrida de cron.

Num clone típico de loja portuguesa essa lista de testes de fumo não pára no checkout genérico. Depois do salto do núcleo corremos o callback IfthenPay com um payload de teste assinado, e geramos uma referência MB Way no sandbox do banco aderente. É o mesmo smoke da ronda semanal de manutenção WordPress. Um TypeError no init mata o checkout antes de qualquer gateway responder. Um 200 no login não prova que o Multibanco ainda emite referências, nem que o SMS do MB Way ainda é aceite pela app.

Não confiamos em “o WP Rocket disse que testou o 7.1.” Testaram. A suíte deles falhou a chave inteira mais uma closure de um segundo plugin. A instalação limpa de Ginder não deu este erro. A combinação deu. A combinação é o que um site de cliente realmente é. Loja WooCommerce com Elementor Pro, WP Rocket e IfthenPay é exatamente essa combinação, só que o segundo plugin aqui também gera referências MB Way.

Em produção mantemos uma cópia de segurança com nome, de antes do salto, e uma janela de 15 minutos em que alguém está a olhar para o registo de erros, não só para o ping de uptime. Uma homepage em ecrã branco com um 200 vindo da cache HTML não é um passe.

Um clone típico nesta casa é WordPress + WooCommerce ou Elementor + WP Rocket + um plugin de formulário. É a combinação que Ginder e a Wordify descreveram. Não esperamos pelo tweet do fornecedor a dizer “testámos o 7.1.” Levamos o 7.1 no clone, pedimos / e /wp-admin/, e fazemos grep no registo PHP por TypeError e Cloudflare.php. Se o registo está calado e os dois URLs devolvem 200 sem saltar plugins, o salto pode ir para produção na mesma ordem.

A versão de PHP faz parte do clone. O TypeError é uma falha de tipos estritos do PHP 8. Um alojamento ainda em PHP 7.4 não lançaria este erro fatal em concreto. Isso não é razão para ficar no 7.4. É razão para testar 8.2 ou 8.3 com o mesmo conjunto de plugins que corre em produção, não com um WordPress nu.

É o contrato de manutenção de sites WordPress num parágrafo. Staging primeiro. Plugin primeiro quando o fornecedor tem um pin. Núcleo depois. Verificação de saúde no fim. Orçamento por escrito após um brief curto.

Se a superfície pública já está em Cloudflare Workers ou Pages, o erro fatal PHP mesmo assim mata o wp-admin e qualquer rota de origem. A cache HTML no edge não substitui um plugin que dá erro fatal no init. O pilar Cloudflare edge é a camada de entrega. Este incidente é a camada de origem.

#Atualizações automáticas e 7.1.1

A Wordify avisou que as atualizações automáticas do 7.1 estavam a rolar na mesma semana. Um site que ninguém tocou podia na mesma passar de bem para em baixo de um dia para o outro.

Adam Silverstein abriu o Trac 65920 a 20 de agosto: um fluxo GitHub Actions para testar os 100 plugins de topo do diretório contra WordPress ainda não lançado. Rascunho de pull request 13198, marcado para o 7.2. Notou no ticket que este incidente exato não teria sido apanhado, porque o WP Rocket é premium e a API do diretório cobre plugins gratuitos. A mesma classe de erro fatal por mudança de tipo pode na mesma atingir um plugin gratuito com milhões de instalações. É esse o ponto do fluxo.

Aaron Jorbin pediu voluntários para gerir o 7.1.x. O 7.1.1 ficou apontado entre 1 e 24 de setembro de 2026. Trate o 7.1.1 da mesma forma: staging, depois produção. Se as chaves inteiras do 65919 ganharem um shim de compatibilidade no 7.1.1, isso é seguro extra. Não é razão para saltar a 3.23.2.2.

Jeffrey Paul apoiou o ticket de Silverstein: erros fatais repetidos depois de majors estão dentro da esfera de preocupação do núcleo, mesmo quando o ficheiro partido vive num plugin. Essa é a divisão honesta. O núcleo pode testar plugins do diretório. O núcleo não pode testar plugins premium que não tem. O dono do site, ou a pessoa no contrato de manutenção, continua a ser dono do clone.

#O que não estamos a afirmar

Não estamos a dizer para deitar fora o WP Rocket. A 3.23.2.2 é a build atual com o cast. Os plugins de cache continuam a justificar-se em origens PHP.

Não estamos a dizer para saltar o WordPress 7.1. A estilização responsiva, os media do lado do cliente, a barra de administração persistente e o editor em iframe saíram. A nota do roteiro lista o que entrou e o que não entrou.

Não estamos a citar os preços do WP Rocket. As licenças de terceiros são a lista deles. O nosso trabalho de manutenção tem orçamento individual.

Não estamos a inventar uma por centoagem para “a internet inteira.” Os 37 por cento de Ginder são uma frota. Os 10 por cento do WP Rocket são a estimativa da base de utilizadores deles. As duas têm fonte. Nenhuma é um censo.

Última atualização a 1 de setembro de 2026. Fontes: The Repository (21 e 27 de agosto de 2026), o texto com stack trace da Wordify (20 de agosto), a issue 8596 e o pull 8745 no GitHub, Trac 65919 e 65920, o changelog do WP Rocket 3.23.2.2 e o artigo de suporte 1927, Austin Ginder no X, citações do post-mortem de Rémy Lamiot via The Repository.

Próximo passo

Transforme o artigo numa implementação real

Este bloco reforça a ligação interna e conduz o leitor para o passo seguinte mais útil dentro da arquitetura do site.

wp rocket wordpress 7.1#
O WP Rocket 3.23.2.1 e anteriores dá erro fatal no WordPress 7.1 quando o Cloudflare.php chama substr() sobre uma chave de hook inteira. A WPPoland (Mariusz Szatkowski) atualiza o WP Rocket para 3.23.2.2 em staging primeiro, e só depois o WordPress 7.1. Se o site já está em ecrã branco, desative o plugin por SFTP ou WP-CLI com --skip-plugins=wp-rocket, e depois atualize.
O WP Rocket funciona com o WordPress 7.1?#
Sim, a partir do WP Rocket 3.23.2.2, lançado a 20 de agosto de 2026. As versões de cerca de 3.16 até 3.23.2.1 são as que dão erro fatal. Um WordPress limpo mais o WP Rocket sozinho muitas vezes passa. Acrescente um plugin que liga uma closure a deleted_post ou transition_post_status, em geral o Elementor Pro, e o pedido seguinte é um TypeError.
Não uso Cloudflare. Porque é que o WP Rocket deitou o site abaixo?#
O módulo de compatibilidade Cloudflare do WP Rocket corre no init em todos os pedidos, esteja ou não o plugin Cloudflare instalado. A Wordify reproduziu isso. Não precisa de conta Cloudflare para o Cloudflare.php:562 disparar.
Como recupero se o wp-admin está em ecrã branco?#
Não apague o Cloudflare.php dentro do plugin. Troca um erro fatal por outro. Desative o plugin inteiro: wp plugin deactivate wp-rocket --skip-plugins=wp-rocket, ou mude o nome de wp-content/plugins/wp-rocket por SFTP. Depois atualize para 3.23.2.2 e reative. Recuar o núcleo para 7.0.4 também resulta. É mais lento e deita fora o trabalho do 7.1.
Devo desligar as atualizações automáticas do WordPress?#
Não como religião. Atualizações automáticas sem um clone de staging e sem uma verificação de saúde depois do salto são o caminho de um lançamento de núcleo à quarta para uma interrupção à quinta. A WPPoland testa núcleo, plugins e PHP juntos em staging. A produção recebe primeiro o salto do plugin, depois o do núcleo. Orçamento por escrito para esse contrato de manutenção após um brief curto.

Precisa de FAQ adaptado ao setor e mercado? Criamos uma versão alinhada com os seus objetivos de negócio.

Fale connosco

Artigos Relacionados

Lei polaca NIS2 e fornecedores WordPress

A transposição polaca da NIS2 aplica-se desde 3 de abril de 2026. A definição de prestador de serviços geridos abrange a administração remota, pelo que descreve quem mantém o WordPress de outrem. O que diz o texto legal, e o que não diz.