Como corrigir o cache que quebra páginas de quiz entre Tutor LMS e WP Rocket
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
- 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.
- 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 - 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 - 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(.*) - 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 - 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.
// 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 );














