# Como corrigir o cache do WP-Optimize em páginas de curso do Tutor LMS

O cache do WP-Optimize em páginas de curso do Tutor LMS quebra quando o cache de página estático é servido a alunos logados: a versão deslogada congelada esconde o conteúdo liberado, o progresso e os botões de matrícula, porque o WP-Optimize entrega o mesmo arquivo HTML para todos sem o cache por usuário ativado.

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

O cache do WP-Optimize em páginas de curso do Tutor LMS gera um arquivo HTML estático de cada página e o serve a todos os visitantes seguintes, evitando reprocessar PHP a cada acesso. Isso acelera páginas públicas, mas entra em conflito com o Tutor LMS, que monta as páginas de curso de forma dinâmica para cada aluno: o que está liberado, o progresso da aula, o botão de continuar e a área de conteúdo restrito dependem de quem está logado. Quando o WP-Optimize guarda uma versão dessa página e a reentrega para todo mundo, o aluno vê o estado de outra sessão, normalmente o estado deslogado.

Na prática, a página de curso, de aula ou do painel do aluno aparece como se ninguém estivesse logado, mostrando o botão de matrícula no lugar do conteúdo já comprado. A documentação oficial do WP-Optimize trata exatamente esse cenário e oferece o User specific cache, recurso que gera arquivos de cache separados por usuário logado, citando como exemplo justamente alunos de curso online que precisam ver o conteúdo restrito acelerado. A correção combina excluir as páginas dinâmicas do cache padrão e, quando aplicável, ligar o cache por usuário.

## Como identificar

- A página de curso do Tutor LMS mostra o botão 'Matricular-se' ou 'Inscrever-se' mesmo para um aluno que já está logado e matriculado.
- O conteúdo da aula aparece bloqueado com a mensagem de conteúdo restrito para quem já tem acesso, ou mostra a versão pública da lição.
- A barra de progresso do curso fica travada em um valor antigo e só atualiza depois de limpar manualmente o cache em WP-Optimize.
- O painel do aluno (frontend dashboard) carrega vazio ou exibe os dados de outro usuário, porque o HTML cacheado foi gerado em outra sessão.
- Sair e entrar na conta não muda nada na página de curso até a expiração do cache, sinal de que um arquivo estático está sendo servido a todos.

**Antes de começar:** Antes de alterar as regras de cache e de exclusão de URLs em produção, faça um backup do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging, para reverter rápido caso uma página de curso pare de carregar para os alunos.

## Como prevenir

- Sempre que instalar um plugin de cache em um site com Tutor LMS, exclua de imediato as URLs de curso, aula e painel do aluno do cache de página estático.
- Mantenha o User specific cache ligado em sites com área de membros, para que conteúdo restrito de aluno logado seja cacheado por usuário e nunca compartilhado entre sessões.
- Padronize os permalinks dos cursos e revise as regras de exclusão sempre que mudar a base de URL do Tutor LMS, evitando que páginas dinâmicas escapem da lista.
- Teste cada mudança de cache logado como aluno e deslogado como visitante antes de subir para produção, validando progresso, matrícula e conteúdo liberado.

Erros relacionados

- [Como corrigir o cache do WP Rocket em páginas de curso do Tutor LMS](https://full.services/wp-fixer/corrigir-cache-wp-rocket-tutor-lms/)
- [Como corrigir o cache que quebra páginas de quiz entre Tutor LMS e WP Rocket](https://full.services/wp-fixer/corrigir-cache-quiz-tutor-lms-wp-rocket/)
- [Como resolver cache que não limpa no WordPress](https://full.services/wp-fixer/corrigir-cache-nao-limpa-wordpress/)

## Causa

- O cache de página do WP-Optimize está ativo sem o User specific cache, então o mesmo arquivo HTML estático da página de curso é servido a todos os alunos logados, congelando o estado de uma única sessão.
- As URLs dinâmicas do Tutor LMS (a base /courses/, as lições, o /dashboard/ do aluno) não estão na lista de URLs excluídas do cache em WP-Optimize, então essas páginas que deveriam ser sempre dinâmicas viram arquivos estáticos.
- O preload (pré-carregamento) do WP-Optimize gerou a versão deslogada das páginas de curso antes de qualquer aluno acessar, e é justamente esse HTML público que passa a ser entregue a quem está matriculado.
- A página de curso traz nonce do WordPress e tokens de sessão dentro do HTML; cacheados de forma estática, esses valores expiram e quebram ações AJAX do Tutor LMS como marcar aula concluída ou enviar quiz.
- O cookie de login não está fazendo o WP-Optimize ignorar o cache para o usuário logado naquela página específica, fazendo o servidor entregar o arquivo cacheado em vez de gerar o conteúdo do aluno.

## Como resolver

1. Limpe o cache atual do WP-Optimize: Antes de qualquer ajuste, apague o cache existente para descartar as versões deslogadas já gravadas das páginas de curso. Sem isso, você continua testando contra arquivos antigos e acha que a correção não funcionou.

```
Painel WP -> WP-Optimize -> Cache
Clique em 'Purge cache' (Limpar cache) para apagar todos os arquivos gerados
```

2. Exclua as páginas dinâmicas do Tutor LMS do cache: Adicione as URLs do Tutor LMS à lista de exclusão do cache para que essas páginas voltem a ser geradas dinamicamente a cada acesso. Use a base de cursos, as lições e o painel do aluno; o curinga no fim cobre as URLs filhas.

```
Painel WP -> WP-Optimize -> Cache -> aba de configurações avançadas
```

3. No campo de URLs a excluir do cache, adicione uma por linha:

```
/courses/*
/course/*
/dashboard/*
```

4. Ative o User specific cache para alunos logados: Ligue o cache por usuário, recurso que a documentação do WP-Optimize indica para conteúdo restrito de curso online: ele gera arquivos de cache separados por usuário logado, então cada aluno recebe a versão correta com o conteúdo liberado, sem perder velocidade.

```
Painel WP -> WP-Optimize -> Cache -> configurações
Marque a opção 'Serve a cached version of the page to logged in users' / 'User specific cache'
Salve as alterações
```

5. Confirme que o aluno recebe a página dinâmica: Entre com uma conta de aluno real matriculado e abra a página do curso e uma lição. O conteúdo liberado, o progresso e o botão de continuar precisam aparecer corretamente. Repita em uma aba anônima deslogada para confirmar que a versão pública também está certa.

```
Acesse a página do curso logado como aluno matriculado
Verifique no rodapé da página o comentário 'Cached by WP-Optimize' e o horário de geração
Abra a mesma URL em aba anônima e compare o estado deslogado
```

6. Garanta a limpeza do cache ao publicar conteúdo: Confirme que o WP-Optimize limpa o cache quando um curso ou aula é atualizado, para o aluno não ver conteúdo antigo. Se a estrutura de URLs do seu curso for diferente da padrão, ajuste os caminhos da exclusão para casar com os seus permalinks.

```
Painel WP -> WP-Optimize -> Cache -> confirme a expiração (cache lifespan) ativa
Atualize um curso de teste e verifique se a página correspondente saiu do cache
Ajuste os caminhos de exclusão conforme os permalinks reais do Tutor LMS
```


## Código

```php
<?php
// Garante que as paginas dinamicas do Tutor LMS nunca sejam servidas do
// cache de pagina do WP-Optimize, mesmo que a regra do painel falhe.
add_filter( 'wpo_url_exceptions', 'full_tutor_lms_no_cache' );
function full_tutor_lms_no_cache( $exceptions ) {
    $rotas = array(
        '/courses/.*',   // arquivo e single de curso
        '/course/.*',    // base alternativa do permalink
        '/lesson/.*',    // paginas de aula
        '/dashboard/.*', // painel frontend do aluno
    );
    foreach ( $rotas as $rota ) {
        if ( ! in_array( $rota, $exceptions, true ) ) {
            $exceptions[] = $rota;
        }
    }
    return $exceptions;
}
```

## Perguntas frequentes

### Por que a página de curso do Tutor LMS mostra a versão deslogada para alunos logados

Porque o WP-Optimize gravou um arquivo HTML estático dessa página e o serve a todos. Sem o cache por usuário, o aluno logado recebe a versão pública congelada. Exclua as URLs de curso do cache e ative o User specific cache para corrigir.

### Preciso desligar todo o cache do WP-Optimize por causa do Tutor LMS

Não. O ideal é manter o cache nas páginas públicas e excluir apenas as URLs dinâmicas do curso, da aula e do painel do aluno. Assim o site continua rápido e só as páginas que dependem do login deixam de ser servidas estáticas.

### O que é o User specific cache do WP-Optimize

É um recurso que gera arquivos de cache separados por usuário logado. A documentação oficial cita justamente alunos de curso online: cada participante recebe a versão cacheada do conteúdo restrito dele, mantendo a velocidade sem misturar sessões diferentes.

### Quais URLs do Tutor LMS devo excluir do cache do WP-Optimize

Exclua a base dos cursos, as páginas de aula e o painel do aluno, geralmente /courses/*, /course/* e /dashboard/*. Confira os permalinks reais do seu site, pois a base pode variar, e use o curinga no fim para cobrir as páginas filhas.

### O cache do WP-Optimize trava a barra de progresso do aluno

Sim. Se a página de curso é servida de um arquivo estático, o progresso fica congelado no valor da versão cacheada. Excluir a página do cache e ligar o cache por usuário faz o progresso voltar a refletir o estado real de cada aluno.

### Quizzes e botões de marcar aula concluída pararam depois de ligar o cache

O HTML cacheado guarda nonces e tokens que expiram, quebrando as ações AJAX do Tutor LMS. Excluir as páginas de aula e de quiz do cache resolve, pois elas voltam a ser geradas com nonce válido a cada carregamento.

### Como confirmar se a página de curso está sendo servida do cache

Abra a página, veja o código-fonte e procure pelo comentário do WP-Optimize no rodapé indicando que a página foi cacheada e o horário. Se ele aparecer em uma página de curso logada, a exclusão ainda não está pegando aquela URL.

### Depois de excluir as URLs, as páginas de curso ficam lentas

Elas passam a ser geradas dinamicamente, o que custa um pouco mais que o estático, mas é o comportamento correto para conteúdo de aluno. Com o User specific cache ligado, o aluno ainda recebe uma versão cacheada própria após o primeiro acesso.

**Fonte:** [WP-Optimize — How do I enable user-specific cache? (documentação oficial)](https://teamupdraft.com/documentation/wp-optimize/how-do-i-enable-user-specific-cache/)
