# Como corrigir scripts do Tutor LMS removidos pelo Perfmatters no WordPress

O Perfmatters remove scripts do Tutor LMS quando o Script Manager desativa o JavaScript do plugin nas páginas de curso, ou quando o Delay JavaScript adia o carregamento dos scripts da sala de aula até uma interacao, deixando player de vídeo, quiz e progresso sem funcionar.

## O que é scripts do Tutor LMS removidos pelo Perfmatters?

O Perfmatters e um plugin de performance que reduz o peso das páginas controlando quais scripts e estilos carregam. Dois recursos dele costumam atingir o Tutor LMS: o Script Manager, que permite desativar arquivos JavaScript e CSS por página, tipo de post ou em todo o site; e o Delay JavaScript, que adia a execução do JavaScript até o primeiro toque, rolagem ou clique do visitante. Quando esses recursos alcançam os scripts do Tutor LMS, a interface da aula carrega visualmente, mas as funções interativas param.

O Tutor LMS depende fortemente de JavaScript e de chamadas AJAX para funcionar: o player de vídeo da aula, o envio e a correção do quiz, a marcacao de aula concluida, a barra de progresso do curso e o checkout dos cursos pagos. Se o Perfmatters desativa o handle do Tutor LMS no Script Manager ou inclui esses arquivos no Delay JavaScript sem excecao, o aluno ve a página, mas os botões não respondem, o quiz não envia e o vídeo não toca. O problema concentra-se nas páginas de curso, licao e quiz, justamente onde o conteúdo dinâmico vive.

## Como identificar

- O player de vídeo da aula não carrega ou fica preto, e o botão de marcar a aula como concluida não responde ao clique dentro da página de licao do Tutor LMS.
- O quiz abre mas trava ao enviar: o botão 'Submit Quiz' não faz nada ou a página recarrega sem registrar a resposta.
- A barra de progresso do curso fica parada e o aluno não avança para a próxima aula mesmo concluindo a atual.
- No console do navegador (F12) aparece 'Uncaught ReferenceError' ou '$ is not defined' apontando para arquivos do diretório /wp-content/plugins/tutor/.
- Os botões de adicionar curso ao carrinho ou de inscricao (enroll) ficam inativos depois de ativar o Script Manager ou o Delay JavaScript no Perfmatters.

**Antes de começar:** Antes de mexer no Script Manager e nas regras de Delay JavaScript de um site em producao com alunos ativos, faça um backup completo (arquivos e banco de dados) ou teste primeiro em um ambiente de staging, pois desativar o script errado pode deixar toda a área de cursos sem funcionar para quem já esta matriculado.

## Como prevenir

- Sempre que ativar o Script Manager do Perfmatters, teste imediatamente uma página de curso, uma de licao e um quiz logado como aluno antes de salvar as regras em producao.
- Mantenha uma lista de exclusoes fixa no Delay JavaScript com 'tutor' e 'jquery', para que novas otimizacoes não voltem a adiar os scripts essenciais da sala de aula.
- Evite desativar scripts em 'Everywhere' sem mapear os post types do Tutor LMS (curso, licao e quiz são tipos separados) e use excecoes por Current URL ou Post Type.
- Ative uma otimização de cada vez no Perfmatters e valide as funções interativas do Tutor LMS a cada passo, em vez de ligar vários recursos de performance ao mesmo tempo.

Erros relacionados

- [Como corrigir scripts que não carregam pelo Script Manager do Perfmatters](https://full.services/wp-fixer/corrigir-script-manager-perfmatters/)
- [Como corrigir funcionalidades quebradas pelo Perfmatters](https://full.services/wp-fixer/corrigir-funcionalidades-quebradas-perfmatters/)
- [Como corrigir scripts essenciais do WooCommerce removidos pelo Perfmatters](https://full.services/wp-fixer/corrigir-scripts-woocommerce-perfmatters/)

## Causa

- No Script Manager do Perfmatters, o handle do JavaScript do Tutor LMS (por exemplo tutor-front ou tutor) foi desativado para a página de curso, ou foi desativado em 'Everywhere' sem adicionar a página de aula como excecao, removendo a interatividade da sala.
- O recurso Delay JavaScript do Perfmatters esta no modo 'Delay All Scripts' e adia os arquivos do Tutor LMS até uma interacao do usuário, fazendo o player de vídeo e o quiz não inicializarem no carregamento da página.
- O jQuery do nucleo do WordPress foi desativado ou adiado pelo Perfmatters, e como os scripts do Tutor LMS dependem do jQuery, eles quebram com 'jQuery is not defined' antes de rodar.
- A regra do Script Manager foi criada por tipo de post errado: o JavaScript do Tutor LMS foi mantido apenas no post type 'courses' mas desativado nas páginas de licao (lesson) e quiz, que são post types separados no Tutor LMS.
- O AJAX admin-ajax do Tutor LMS, usado para enviar quiz e gravar progresso, depende de um script que foi adiado pelo Delay JavaScript, entao a chamada AJAX nunca dispara enquanto o visitante não interage com a página.

## Como resolver

1. Abra o Script Manager nas páginas de curso e licao: Visite uma página de curso, de licao e de quiz com o seu usuário logado e abra o Script Manager pela barra de administracao do Perfmatters no topo da página. Assim você ve exatamente quais scripts o Perfmatters esta controlando naquele contexto, com os handles reais carregados pelo Tutor LMS.

```
Acesse a página de uma licao do curso já logado como administrador
Na barra superior clique em Perfmatters -> Script Manager
Ative a opção 'Show jQuery and Dependencies' para ver os scripts dependentes
```

2. Reative os scripts do Tutor LMS para as páginas de curso: Localize os handles que começam com tutor (como tutor-front e tutor) e garanta que estão habilitados (Enabled) nas páginas de curso, licao e quiz. Se você os havia desativado em 'Everywhere', use a opção de excecao 'Current URL' ou 'Post Type' para mante-los ativos justamente onde o Tutor LMS precisa deles.

```
No Script Manager, encontre os handles iniciados por 'tutor'
Marque Enabled para esses scripts
Se estavam OFF em Everywhere, adicione excecao em 'Current URL' ou no Post Type das licoes/quizzes
```

3. Exclua os scripts do Tutor LMS do Delay JavaScript: Em Perfmatters -> Assets -> JavaScript, no recurso Delay JavaScript, adicione palavras-chave que identifiquem os arquivos do Tutor LMS no campo de exclusoes para que eles não sejam adiados. Inclua também jquery, já que os scripts do Tutor LMS dependem dele para inicializar.

```
Painel WP -> Perfmatters -> Assets -> JavaScript
No campo de exclusão do Delay JavaScript adicione: tutor
Adicione também: jquery
Salve e limpe o cache do site
```

4. Confirme que o jQuery não foi desativado nas páginas de curso: Se você usa a opção de remover ou adiar o jQuery do nucleo, garanta que ela não se aplica as páginas do Tutor LMS. O player, o quiz e o progresso do Tutor LMS são construidos sobre o jQuery e quebram sem ele.

```
No Script Manager, verifique se 'jquery-core' esta Enabled nas páginas de curso/licao
Se houver regra de Delay para jquery em Assets -> JavaScript, exclua jquery do delay
```

5. Limpe o cache e teste a sala de aula como aluno: Depois de ajustar o Script Manager e as exclusoes, limpe o cache do Perfmatters e do plugin de cache em uso, e teste a aula numa janela anonima como aluno: assistir o vídeo, enviar o quiz e marcar a aula como concluida. Confirme que o console do navegador não acusa mais erros de JavaScript do Tutor LMS.

```
Painel WP -> Perfmatters -> Tools -> Clear Local Fonts / limpe o cache
Limpe também o cache do seu plugin de cache (WP Rocket, LiteSpeed etc.)
Abra uma janela anonima, faça a aula como aluno e verifique o Console (F12)
```


## Código

```php
<?php
/**
 * Garante que os scripts do Tutor LMS nunca sejam adiados pelo Delay JavaScript
 * do Perfmatters nas paginas de curso, licao e quiz.
 * Cole no functions.php do tema filho ou num plugin de snippets.
 */
add_filter( 'perfmatters_delay_js_exclusions', 'full_perfmatters_keep_tutor_lms' );
function full_perfmatters_keep_tutor_lms( $exclusions ) {
    // Palavras-chave que casam com os arquivos JS essenciais do Tutor LMS e do jQuery.
    $keep = array( 'tutor', 'jquery' );
    return array_merge( (array) $exclusions, $keep );
}
```

## Perguntas frequentes

### Por que o Tutor LMS parou de funcionar depois que ativei o Perfmatters

Na maioria dos casos o Script Manager do Perfmatters desativou o JavaScript do Tutor LMS nas páginas de curso, ou o Delay JavaScript adiou esses scripts até uma interacao. Reative os handles iniciados por tutor no Script Manager e adicione tutor e jquery as exclusoes do Delay JavaScript.

### Como impedir que o Delay JavaScript do Perfmatters adie os scripts do Tutor LMS

Va em Perfmatters, Assets, JavaScript e, no campo de exclusoes do Delay JavaScript, adicione a palavra-chave tutor para que os arquivos do plugin não sejam adiados. Inclua também jquery, já que os scripts do Tutor LMS dependem dele para inicializar.

### O quiz do Tutor LMS não envia depois do Perfmatters, o que fazer

O envio do quiz usa AJAX e depende do JavaScript do Tutor LMS carregado no momento. Confirme no Script Manager que o script do Tutor LMS esta habilitado na página de quiz e remova esses arquivos do Delay JavaScript, depois limpe o cache e teste o envio novamente.

### Preciso desativar o Perfmatters inteiro para o Tutor LMS funcionar

Não. O Perfmatters pode conviver com o Tutor LMS desde que você mantenha os scripts do plugin habilitados nas páginas de curso e os exclua do Delay JavaScript. O ideal e usar excecoes por Current URL ou Post Type em vez de desligar a otimização no site todo.

### Como descubro qual script do Tutor LMS o Perfmatters esta bloqueando

Abra a página da licao logado como administrador e clique em Perfmatters, Script Manager na barra superior. Ele lista os handles carregados naquela página; os do Tutor LMS começam por tutor. Veja quais estão desativados e reative-os nesse contexto.

### O player de vídeo da aula ficou preto depois do Perfmatters, e o mesmo problema

Geralmente sim. O player do Tutor LMS e inicializado por JavaScript; se o script foi desativado ou adiado, o vídeo não carrega. Reative o script do Tutor LMS no Script Manager da página de aula e exclua tutor do Delay JavaScript, depois limpe o cache.

### O Script Manager so mantem o Tutor LMS no post type de curso, por que as licoes quebram

Porque no Tutor LMS a licao e o quiz são post types separados do curso. Se a regra do Script Manager habilita o script apenas no post type courses, as páginas de licao e quiz ficam sem ele. Ajuste a excecao para incluir também os post types de licao e quiz.

### Devo excluir o jQuery do Delay JavaScript mesmo usando o Tutor LMS

Sim. Os scripts do Tutor LMS são construidos sobre o jQuery e quebram com a mensagem jQuery is not defined se ele for adiado. Adicione jquery as exclusoes do Delay JavaScript e confirme no Script Manager que o jquery-core continua ativo nas páginas de curso.

**Fonte:** [Perfmatters — Script Manager (disable scripts per page/post)](https://perfmatters.io/docs/disable-scripts-per-page-post-wordpress/)
