🎉 USE O CUPOM DESCONTO.FULL | 20% OFF acima de R$ 50,00

Como corrigir o cache que quebra páginas de quiz entre Tutor LMS e WP Rocket

Time Full Services Time Full Services
Tipo Performance & Velocidade
Nome do erro Cache do WP Rocket quebra páginas de quiz no Tutor LMS EN: WP Rocket cache breaking Tutor LMS quiz pages
Severidade Grave
Descrição Quando o cache quiz do Tutor LMS com WP Rocket quebra, o Delay JavaScript Execution segurou o tutor.js até a interacao do aluno, ou o Combine JavaScript trocou a ordem de carga. Excluir os assets do quiz dessas otimizacoes restaura o timer e o envio AJAX das respostas.

O que é o cache do WP Rocket que quebra o quiz do Tutor LMS?

Esse erro acontece quando o quiz do Tutor LMS para de funcionar depois que o WP Rocket entra no site. O quiz do Tutor LMS depende de JavaScript para rodar: ele inicia o timer da prova, navega entre as perguntas, salva cada resposta e envia a tentativa por AJAX (acoes como tutor_quiz_attempt_save e tutor_render_quiz_content), tudo via tutor.js e jQuery. O WP Rocket, por padrão, adia esse JavaScript com o Delay JavaScript Execution, que so executa o script após a primeira interacao do visitante, e ainda pode combinar e minificar os arquivos. Com o script do quiz adiado ou fora de ordem, o botão Start Quiz não responde, o timer fica em zero, o botão Next não avanca a pergunta ou o Submit Quiz não registra a tentativa. O conserto e dizer ao WP Rocket para não atrasar nem combinar os arquivos do Tutor LMS e nunca cachear a página de tentativa do quiz.

Como identificar

  • O botão Start Quiz não reage ao clique na primeira interacao do aluno e o quiz não inicia.
  • O cronometro (timer) do quiz fica parado em 00:00 ou não aparece na página da prova.
  • O botão Next não avanca para a próxima pergunta e o Submit Quiz não finaliza a tentativa.
  • O Console do navegador (F12) mostra erro do tipo “tutor is not defined” ou “jQuery is not defined”.
  • A tentativa funciona para o aluno logado que ve a página sem cache, mas falha quando a página do quiz e servida da versão cacheada.

Como prevenir

  • Ao instalar ou atualizar o WP Rocket, faca uma tentativa de quiz completa como aluno anonimo antes de publicar mudancas
  • Mantenha os assets do Tutor LMS e do jQuery na lista de exclusão do Delay JavaScript e do Combine JavaScript do WP Rocket
  • Adicione as páginas de tentativa do quiz em Never Cache URL(s) por causa do nonce e do timer dinâmicos
  • Depois de cada atualização do Tutor LMS ou do WP Rocket, refaca um quiz de teste para detectar regressao cedo

Causa

  • O Delay JavaScript Execution do WP Rocket segura o tutor.js até a primeira interacao, e o timer e o envio AJAX do quiz não inicializam a tempo.
  • A opção Combine JavaScript files junta o tutor.js com outros scripts e quebra a ordem de execução das dependencias de jQuery.
  • A minificacao de JavaScript do WP Rocket corrompe o objeto _tutorobject (URL do admin-ajax e nonce) que o quiz usa para enviar as respostas.
  • A página de tentativa do quiz foi servida do cache com um nonce de segurança já expirado, e o Tutor LMS recusa a chamada AJAX por nonce invalido.
  • O Remove Unused CSS do WP Rocket removeu o estilo do timer e dos botões do quiz, deixando a prova travada visualmente após o clique.

Como resolver

  1. Confirme que e o WP Rocket: abra o painel em Settings, WP Rocket, va na aba File Optimization e desligue temporariamente o Delay JavaScript Execution. Faca uma tentativa de quiz como aluno numa aba anonima. Se o timer e o envio voltam, a causa esta nas otimizacoes de JavaScript.
  2. Exclua os assets do Tutor LMS do Delay JavaScript: religue o Delay JavaScript Execution e, no campo Excluded JavaScript Files, adicione os caminhos do Tutor LMS, um por linha. Salve as opções.
    /wp-content/plugins/tutor/assets/js/
    /wp-content/plugins/tutor-pro/assets/js/
    tutor
    jquery.min.js
  3. Tire o Tutor LMS do Combine e do Minify JavaScript: ainda na aba File Optimization, no campo de exclusão das opções Minify e Combine, adicione o mesmo caminho do plugin para o script do quiz não ser juntado nem reescrito.
    /wp-content/plugins/tutor/assets/js/(.*).js
    /wp-content/plugins/tutor-pro/assets/js/(.*).js
  4. Nunca cacheie a página de tentativa do quiz: abra a aba Advanced Rules do WP Rocket e adicione o caminho das páginas de tentativa em Never Cache URL(s), para o nonce ser sempre gerado fresco e a chamada AJAX não ser recusada.
    /quiz/(.*)
    (.*)tutor_quiz(.*)
  5. Limpe o cache e gere de novo: depois de salvar, clique em Clear and preload cache no menu do WP Rocket para descartar as páginas antigas que ainda servem o quiz com o script atrasado.
    Settings -> WP Rocket -> Dashboard -> Clear and preload cache
  6. Confirme a tentativa real: abra a página do quiz como aluno numa aba anonima, inicie a prova, responda, avance e finalize. Verifique se o timer correu, se a tentativa aparece em Tutor LMS, Quiz Attempts e se o Console (F12) não acusa tutor is not defined.
PHP
// functions.php do tema filho — marca os scripts do quiz do Tutor LMS para o WP Rocket NUNCA atrasar
// (alternativa via codigo ao campo de exclusao; o atributo nowprocket desliga o Delay JS naquele handle)
add_filter( 'script_loader_tag', function ( $tag, $handle ) {
    $excluir = array( 'tutor-front', 'tutor', 'tutor-script', 'wp-quiz' );
    if ( in_array( $handle, $excluir, true ) ) {
        return str_replace( '<script ', '<script nowprocket ', $tag );
    }
    return $tag;
}, 10, 2 );

Perguntas frequentes

Por que o quiz do Tutor LMS para de funcionar so depois de instalar o WP Rocket?
Porque o WP Rocket adia o JavaScript com o Delay JavaScript Execution. O tutor.js, que controla o timer e o envio AJAX do quiz, so executa após a primeira interacao do aluno e isso quebra a inicializacao da prova. Excluir os assets do Tutor LMS dessa otimização resolve.
Qual otimização do WP Rocket mais quebra o quiz?
O Delay JavaScript Execution e a principal, seguido do Combine JavaScript files. O Delay segura o tutor.js até a interacao e o Combine muda a ordem de carga das dependencias de jQuery. Excluir o caminho do Tutor LMS dos dois campos costuma resolver o timer e o envio.
Preciso desligar o cache do site inteiro para o quiz voltar?
Não. Desligar o cache resolve o sintoma mas mata a performance do LMS. O caminho certo e excluir apenas os assets do Tutor LMS das otimizacoes de JavaScript e adicionar a página de tentativa do quiz em Never Cache URL(s).
O quiz funciona para mim logado mas falha para o aluno. Por que?
Porque o admin logado costuma ver a página sem cache, entao o tutor.js carrega normal. O aluno recebe a versão cacheada e otimizada, onde o script foi adiado ou o nonce expirou. Teste sempre a tentativa numa aba anonima como aluno.
Como descubro qual script do quiz esta sendo bloqueado?
Abra o Console do navegador com F12 na aba Console e inicie o quiz. Mensagens como tutor is not defined ou jQuery is not defined apontam que o tutor.js ou o jQuery foi adiado ou removido pela otimização do WP Rocket.
O atributo nowprocket faz a mesma coisa que o campo de exclusão?
Sim. O nowprocket marca um script para o WP Rocket não aplicar o Delay JavaScript Execution, igual a adicionar o caminho no campo Excluded JavaScript Files. A diferenca e que o atributo fica no código do tema, útil para versionar a correção do quiz.
Por que preciso colocar a página do quiz em Never Cache URL(s)?
Porque a tentativa do quiz usa um nonce de segurança e um timer que mudam a cada acesso. Se a página for servida do cache, o nonce pode estar expirado e o Tutor LMS recusa o envio AJAX. Never Cache URL(s) garante uma página sempre fresca para a tentativa.
Depois de excluir os assets preciso limpar o cache?
Sim. As páginas já cacheadas continuam servindo o quiz com o script adiado até o cache ser regenerado. Use Clear and preload cache no painel do WP Rocket para forcar a recriacao das páginas com a exclusão aplicada.

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.

Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes