# Como corrigir o cache do WP Rocket em páginas de curso do Tutor LMS no WordPress

O cache do WP Rocket em páginas de curso do Tutor LMS quebra quando o WP Rocket serve uma versão estática de uma página que deveria ser personalizada por aluno, fazendo o progresso, o player de aula ou o status de matrícula aparecerem errados para quem está logado.

## O que é cache do WP Rocket em páginas de curso do Tutor LMS?

O WP Rocket gera um arquivo HTML estático de cada página e o serve direto, sem passar pelo PHP, para deixar o site mais rápido. Isso funciona para páginas públicas e iguais para todo mundo, como a vitrine de cursos. O problema é que as páginas internas do Tutor LMS, o player de aula, a tela de progresso, o dashboard do aluno e a área de quizzes, são dinâmicas: o conteúdo muda conforme o aluno logado e a sua matrícula. Quando o WP Rocket cacheia essas páginas, ele congela a versão do primeiro visitante e entrega a mesma cópia para os demais.

Na prática, o aluno A pode ver o progresso do aluno B, o botão de matrícula aparece para quem já comprou, uma aula concluída volta a aparecer como pendente, ou a tela mostra conteúdo desatualizado. Segundo a documentação oficial do WP Rocket, páginas que dependem do usuário logado não devem ser cacheadas na versão pública; o caminho correto é excluir essas URLs do cache pelo campo Never Cache URL(s) e, se o site usa cache para logados, ativar o User Cache. O cache do WP Rocket em páginas de curso do Tutor LMS volta ao normal quando essas rotas dinâmicas saem do cache estático.

## Como identificar

- Um aluno vê o progresso, o nome ou as aulas concluídas de outro aluno ao abrir a área do curso, porque a página cacheada do primeiro visitante é servida para todos.
- O botão 'Matricular' ou 'Inscrever-se' continua aparecendo para quem já comprou o curso, ou some para quem ainda não comprou.
- O player de aula mostra a aula travada, com a mensagem de conteúdo restrito, mesmo o aluno estando matriculado e logado.
- O painel do aluno (Dashboard do Tutor LMS) exibe dados desatualizados: aula marcada como concluída volta a aparecer como pendente após recarregar.
- A barra de progresso do curso fica congelada em uma porcentagem antiga e só atualiza depois de limpar o cache do WP Rocket manualmente.

**Antes de começar:** Antes de mexer nas regras de cache ou adicionar o snippet, faça um backup do site (arquivos e banco de dados) ou aplique primeiro em um ambiente de staging. Uma regra de exclusão errada pode deixar todo o catálogo de cursos fora do cache e derrubar a performance da home.

## Como prevenir

- Ao instalar o WP Rocket em um site com Tutor LMS, já cadastre as rotas /dashboard/, /courses/ e /lesson/ no Never Cache URL(s) antes de liberar o acesso dos alunos.
- Mantenha o cookie de sessao do aluno no campo Never Cache Cookies sempre que trocar de plugin de login social ou de checkout, para não perder a exclusão.
- Decida desde o inicio se os alunos navegam logados e, se sim, mantenha o User Cache ativo em vez de cachear a versão pública das páginas de curso.
- Após cada atualização do Tutor LMS ou do WP Rocket, teste a área do curso com duas contas de aluno para garantir que nenhuma página dinâmica voltou ao cache estático.

Erros relacionados

- [Como resolver cache que não limpa no WordPress](https://full.services/wp-fixer/corrigir-cache-nao-limpa-wordpress/)
- [Como corrigir Reduce server response time (TTFB)](https://full.services/wp-fixer/corrigir-ttfb-alto-wordpress/)

## Causa

- O WP Rocket está cacheando as URLs dinâmicas do Tutor LMS (a base de cursos /courses/, o player de aula /lesson/ e o /dashboard/ do aluno), que não constam no campo Never Cache URL(s) da aba Advanced Rules e por isso são servidas como HTML estático.
- A opção de cache para usuários logados (User Cache) está desligada e o aluno acessa a área do curso autenticado: o WP Rocket entrega a versão pública cacheada em vez de gerar a página personalizada do aluno.
- O cookie de sessão do Tutor LMS que identifica o aluno e a matrícula não está listado em Never Cache Cookies, então o WP Rocket ignora a diferença entre alunos e serve uma cópia única.
- A integração nativa do WP Rocket exclui automaticamente carrinho e checkout de alguns plugins de e-commerce, mas não reconhece as páginas internas do Tutor LMS, que precisam ser excluídas manualmente do cache.
- Uma versão antiga do cache estático ficou salva antes da matrícula do aluno e o WP Rocket continua servindo esse arquivo porque a página não está na lista de exclusão e o cache só é regenerado após expirar o Cache Lifespan.

## Como resolver

1. Identifique as rotas dinâmicas do Tutor LMS: Liste as URLs que mudam por aluno: a base dos cursos, o player de aula, o painel do aluno e os quizzes. São essas rotas que não podem virar HTML estático. Use a parte da URL após o domínio para montar as regras de exclusão.

```
/courses/
/course/
/lesson/
/dashboard/
/quiz/
```

2. Exclua as páginas de curso em Never Cache URL(s): No painel do WP Rocket, vá para a aba Advanced Rules e cole as rotas dinâmicas no campo Never Cache URL(s), uma por linha. Segundo a doc oficial, ao excluir uma URL do cache você também a exclui das demais otimizacoes, o que é o comportamento desejado para conteúdo personalizado. O campo aceita Regex para pegar todas as subpáginas.

```
Painel WP -> Configurações -> WP Rocket -> aba Advanced Rules (Regras Avancadas)
```

3. No campo 'Never Cache URL(s)' adicione uma rota por linha:

```
/dashboard/(.*)
/courses/(.*)
/lesson/(.*)
```

4. Exclua o cookie de sessão do aluno em Never Cache Cookies: Ainda na aba Advanced Rules, no campo Never Cache Cookies, informe o ID do cookie que o Tutor LMS ou o WordPress usa para a sessão do aluno logado. Assim o WP Rocket não serve a copia estática para quem tem sessao ativa. O cookie padrão de login do WordPress comeca com wordpress_logged_in_.

```
Painel WP -> WP Rocket -> Advanced Rules -> campo 'Never Cache Cookies'
```

5. Adicione o identificador do cookie de sessao, um por linha:

```
wordpress_logged_in_
```

6. Ative o User Cache se os alunos navegam logados: Se a maior parte do acesso ao curso é feita por alunos autenticados, ative o cache para usuários logados (User Cache) na aba Cache. Ele cria uma versão de cache separada por usuário, evitando que um aluno receba a página de outro, sem perder a performance.

```
Painel WP -> WP Rocket -> aba Cache
Marque 'Enable caching for logged-in WordPress users' (Ativar cache para usuários logados)
Salve as alterações
```

7. Limpe o cache e valide com dois alunos: Apague o cache estático antigo para que as novas regras valham e teste com duas contas de aluno diferentes em janelas separadas, conferindo que cada um ve o próprio progresso e a própria matricula.

```
Painel WP -> barra superior -> WP Rocket -> Limpar cache (Clear cache)
Abra o curso com o Aluno A em uma janela normal e o Aluno B em uma janela anonima
Confirme que o progresso e o status de matricula de cada um aparecem corretos
```


## Código

```php
<?php
add_filter( 'rocket_cache_reject_uri', 'full_tutor_lms_no_cache' );
function full_tutor_lms_no_cache( $uris ) {
    // Rotas dinamicas do Tutor LMS que nao podem virar HTML estatico.
    $uris[] = '/dashboard/(.*)';
    $uris[] = '/courses/(.*)';
    $uris[] = '/lesson/(.*)';
    $uris[] = '/quiz/(.*)';
    return $uris;
}
```

## Perguntas frequentes

### Por que o WP Rocket faz um aluno ver o progresso de outro no Tutor LMS

Porque o WP Rocket serviu a versão em cache da página gerada pelo primeiro visitante para todos os outros. As páginas de curso são dinâmicas e mudam por aluno, entao precisam ser excluidas no campo Never Cache URL(s) ou servidas com o User Cache ativo.

### Quais URLs do Tutor LMS devo excluir do cache do WP Rocket

Exclua as rotas que mudam por aluno: a base de cursos, o player de aula e o painel do aluno, normalmente /courses/, /lesson/ e /dashboard/. Adicione cada uma no campo Never Cache URL(s) da aba Advanced Rules, usando Regex como /dashboard/(.*) para pegar as subpaginas.

### Excluir a página de curso do cache deixa o site mais lento

Segundo a documentação do WP Rocket, ao excluir uma URL do cache você também a exclui de todas as outras otimizacoes. Isso afeta apenas as páginas internas dinâmicas do curso; a vitrine pública e o restante do site continuam cacheados e rapidos.

### Preciso ativar o cache para usuários logados no Tutor LMS

Se os alunos navegam autenticados na maior parte do tempo, ative o 'Enable caching for logged-in WordPress users' (User Cache) na aba Cache. Ele cria uma versão de cache por usuário e evita que um aluno receba a página de outro sem abrir mao da velocidade.

### Como o cookie de sessao ajuda a corrigir o cache do curso

Ao informar o cookie de login no campo Never Cache Cookies, o WP Rocket deixa de servir a copia estática para quem tem sessao ativa. O cookie padrão do WordPress para usuários logados comeca com wordpress_logged_in_.

### Limpei o cache mas o progresso do aluno continua errado

Se o problema persiste após limpar o cache, a URL provavelmente ainda não esta no Never Cache URL(s) ou o User Cache esta desligado. Confirme as regras de exclusão na aba Advanced Rules e teste com duas contas de aluno diferentes em janelas separadas.

### O WP Rocket não exclui as páginas do Tutor LMS sozinho

Não. O WP Rocket exclui automaticamente carrinho e checkout de alguns plugins de e-commerce, mas não reconhece as páginas internas do Tutor LMS. Por isso a exclusão do /dashboard/, /courses/ e /lesson/ precisa ser feita manualmente.

**Fonte:** [WP Rocket — Exclude pages from the cache and optimizations](https://docs.wp-rocket.me/article/54-exclude-pages-from-the-cache)
