Webhook de comentário do WP Discourse não aciona uma atualização de cache do WP Rocket

Como lidamos com o cache de páginas no WordPress?

Eu uso o WP-Rocket em nosso site, mas o cache de páginas (mesmo problema se usar apenas o Cloudflare APO) está impedindo a atualização da contagem de comentários. Verifiquei isso desabilitando o WP-Rocket (e/ou APO), postei uma resposta na publicação correspondente do fórum e a contagem de comentários é atualizada, mas de forma errática. Ou seja, não instantaneamente ou como você esperaria.

Então, encontrei uma dica para adicionar um webhook e isso permitiu que a contagem de comentários fosse atualizada de forma confiável.

No entanto, com o cache de páginas ativado (WP-Rocket ou APO) e usando esse webhook, as contagens de comentários não são atualizadas quando alguém posta uma nova resposta no fórum.

A essência, parece, é que o webhook não está acionando o ambiente WP corretamente para acionar a atualização da página em cache. Parece que temos um glitch na matrix. :grinning_face_with_smiling_eyes:

Edição: Mais um detalhe. Configurei o WP-Rocket de forma que, quando estou logado no WordPress, as páginas não são cacheadas para mim. Apenas para visitantes. Notei que vejo as contagens de comentários serem atualizadas quando estou logado no WordPress, mas não as vejo quando estou como visitante em modo de navegador anônimo.

1 curtida

Não tenho nenhuma resposta, mas como você sabe, o WP Rocket está tentando fazer uma cópia estática e eliminar chamadas de PHP e banco de dados. Não é um cache em si, mas claro — isso é uma questão de definição.

Mas o WP Rocket tem muitos problemas atualmente, e este é talvez um dos menores quando se pensa no próprio site WordPress.

Bem, desse jeito deveria funcionar.

Olá @Brandon007, obrigado por explicar seu problema. Pelo que entendi:

  • O Plugin WP Discourse está atualizando as contagens de comentários corretamente.
  • O cache do WP Rocket não está sendo limpo quando as contagens de comentários são atualizadas.

Mudei o título da sua postagem de “WP Discourse Plugin Not Updating Comment Count” para “WP Discourse comment webhook does not trigger a WP Rocket Cache refresh”.

A resposta básica para o seu problema é que este é um comportamento esperado. O plugin WP Discourse não tem nenhuma integração específica com o WP Rocket e não adicionará uma no futuro previsível.

Mas ainda posso ajudá-lo aqui adicionando uma ação que é acionada após o callback do webhook de sincronização de comentários ter atualizado os metadados do tópico (onde a contagem de comentários é armazenada). Você poderia então escrever seu próprio callback de ação para fazer a limpeza de cache que desejar. Isso funcionaria para sua situação?

3 curtidas

@Angus você conseguiu!

Provavelmente me perderei escrevendo código haha, mas se você puder tornar isso possível. Isso nos coloca, a mim e a outros usuários, um passo na direção certa. Parece que, com sua modificação, permitirá que código do lado do usuário seja adicionado para limpar o cache de qualquer plugin de cache. Isso seria ainda melhor do que focar em um produto. Tentei vários métodos de cache em um site de desenvolvimento e todos tiveram o mesmo resultado de qualquer maneira.

Então, continue meu bom senhor, e obrigado pela resposta.

Olá, Angus. Não tenho certeza se você ainda estava investigando isso?

Algo mais que eu queria adicionar. Dentro do WordPress nativo, e usando qualquer forma de cache de página. Uma vez que um comentário é deixado, o cache da página é purgado por conta própria. Não há uma maneira onde o WP Discourse possa imitar esse comportamento?

Com o WP Rocket não. Ele mantém os comentários dinâmicos, como deveria ser.

Olá Brandon, sim, haverá uma ação para isso, permitindo que você limpe o cache do WP Rocket (ou qualquer outro cache) neste cenário na próxima versão.

Não estou questionando suas habilidades ou as de ninguém e não sei nada, mas não pode haver nada como “ou qualquer cache” porque, até onde sei, o WP Rocket precisa de ferramentas diferentes para limpar seu cache do que o W3 Total Cache, do que o WP Fastest Cache, do que qualquer proxy reverso como Varnish ou Nginx.

E se o WP Rocket estiver criando a parte estática da página, ou seja, o cache, a partir da seção de comentários, há problemas muito maiores do que a limpeza.

Correto. O plugin WP Discourse simplesmente fornecerá uma ação que permitirá que sites que usam diferentes soluções de cache purguem o cache no momento apropriado, usando o método apropriado para a solução de cache em uso.

1 curtida

Angus, obrigado pelo acompanhamento. Alguma ideia geral sobre a data de lançamento?

Além disso, é possível o WP-Discourse imitar o comportamento dos comentários nativos do WordPress? Simplesmente significando que as soluções de cache de página têm uma opção para que o cache de página possa ser limpo quando um usuário deixa um novo comentário naquela página. Isso é ideal.

Como você sabe, a partir de hoje, não podemos usar nenhum tipo de cache de página se quisermos que a contagem de comentários seja incrementada. Essa é uma grande desvantagem para os usuários do WordPress que se preocupam com otimizações de velocidade.

Espero que não, porque tal comportamento seria um desperdício terrível de recursos e, na verdade, quase um fator decisivo.

Ainda estou um pouco confuso porque nativamente o WordPress não tem cache e o WP Rocket definitivamente não limpa todo o seu chamado cache após um comentário.

Apenas uma observação de que a ação que mencionei acima será adicionada em 2.4.6, que está atualmente sendo preparada para lançamento.

A ação receberá os IDs dos posts do WordPress que foram atualizados pelo webhook como argumento, ou seja,

do_action( 'wpdc_after_webhook_post_update', $post_ids );

Veja mais

4 curtidas

Esqueci de mencionar, sua atualização corrigiu o problema! Obrigado. :+1:t3:

Para qualquer outra pessoa que encontrar este problema ao executar o WP-Rocket com o WP-Discourse. O código a seguir (insira no seu arquivo de funções do Wordpress) garantirá que, uma vez que um comentário seja feito na postagem correspondente do Discourse, o cache dessa postagem será purgado.

if( function_exists( 'rocket_clean_post' ) ){
	add_action( 'wpdc_after_webhook_post_update', 'bulk_rocket_clean_post’);
}

function bulk_rocket_clean_post(array $ids){
    foreach ($ids as $id) {
        rocket_clean_post($id);
    }
}
3 curtidas