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

Como corrigir o progresso do aluno que não atualiza no Tutor LMS

Time Full Services Time Full Services
Tipo Outros erros
Nome do erro Progresso do aluno não atualiza no Tutor LMS EN: Tutor LMS student progress not updating
Severidade Atenção
Descrição O progresso do aluno no Tutor LMS não atualiza quando a página de curso fica em cache e a barra continua mostrando a porcentagem antiga mesmo depois de o aluno concluir a aula. Cache de página, requisição AJAX bloqueada e modo de conclusão sequencial são as causas mais comuns.

O que é o progresso do aluno do Tutor LMS que não atualiza?

No Tutor LMS, o progresso do aluno não atualiza quando a barra de porcentagem do curso e o status das aulas permanecem congelados depois que o aluno clica em Marcar como concluída, ou quando concluir uma aula não libera a próxima. Cada aula concluída é gravada como um user meta do tipo _tutor_completed_lesson_id e a porcentagem do curso é recalculada por get_course_completed_percent(); quando essa gravação não chega ao banco, ou quando a página exibida vem do cache, o aluno vê o progresso parado mesmo tendo feito tudo.

Como identificar

  • A barra de progresso do curso fica travada em uma porcentagem fixa (por exemplo 40 por cento) mesmo depois que o aluno conclui novas aulas.
  • O botão Marcar como concluída (Mark as Complete) é clicado, a página recarrega, mas a aula continua sem o ícone de concluída.
  • A próxima aula não é liberada no modo sequencial, e o aluno fica preso na mesma aula sem conseguir avançar.
  • O console do navegador mostra falha na chamada AJAX para admin-ajax.php com a ação tutor_mark_lesson_complete (status 403 ou 0).
  • O relatório do instrutor e o painel do aluno divergem: um mostra o curso concluído e o outro mostra incompleto.
Antes de começar: Faça backup completo do banco de dados (tabelas wp_usermeta e wp_comments do Tutor LMS) antes de rodar comandos WP-CLI ou apagar registros de conclusão, porque progresso apagado por engano não é recuperável e o aluno perde o histórico do curso.

Como prevenir

  • Manter as páginas /courses/, /lesson/ e /quizzes/ permanentemente fora do cache de página em qualquer plugin de cache.
  • Não cachear requisições para admin-ajax.php e revisar regras de firewall sempre que instalar um plugin de segurança novo.
  • Testar a conclusão de aula com um usuário aluno de teste após cada atualização do Tutor LMS, do tema ou do page builder.
  • Evitar o modo sequencial do Content Drip em cursos grandes sem antes validar a ordem das aulas com um aluno real.

Causa

  • Plugin de cache de página (WP Rocket, LiteSpeed Cache, W3 Total Cache) servindo a página da aula em HTML estático: o aluno conclui a aula, mas a página recarregada vem do cache e mostra a barra de progresso antiga.
  • A ação AJAX tutor_mark_lesson_complete em admin-ajax.php está sendo bloqueada por firewall, mod_security ou plugin de segurança, então a conclusão da aula nunca é gravada no banco de dados.
  • O addon Content Drip está no modo Course Content Available Sequentially e uma aula anterior ficou sem ser concluída, então o Tutor LMS não libera nem contabiliza as aulas seguintes.
  • A tabela wp_usermeta tem registros _tutor_completed_lesson_id corrompidos ou duplicados após migração ou importação de curso, fazendo a porcentagem calculada por get_course_completed_percent() ficar incorreta.
  • Tema ou page builder (Elementor, Astra) sobrescreve o template single-lesson e remove o botão ou o nonce de Marcar como concluída, impedindo o registro do progresso.

Como resolver

  1. Excluir as páginas de curso, aula e quiz do cache: Essa é a causa mais comum. No plugin de cache, adicione as URLs do Tutor LMS à lista de não cachear, para que o aluno sempre veja o progresso recalculado. No WP Rocket isso fica em Configurações -> WP Rocket -> Avançado -> Nunca armazenar em cache as URLs.
    /courses/(.*)
    /lesson/(.*)
    /quizzes/(.*)
    /dashboard/(.*)
  2. Liberar a chamada AJAX de conclusão no firewall ou segurança: Garanta que o endpoint admin-ajax.php e a ação de marcar aula como concluída não estejam sendo bloqueados. No Wordfence ou no All in One Security, adicione a ação à allowlist e limpe qualquer regra que retorne 403 para essa requisição.
    Ação AJAX: tutor_mark_lesson_complete
    Endpoint: /wp-admin/admin-ajax.php
    Liberar também: tutor_render_quiz_content
  3. Revisar o modo do Content Drip do curso: Se o curso usa o addon Content Drip no modo sequencial, confirme que nenhuma aula anterior ficou pendente. No editor do curso abra Course Settings -> Content Drip e, se a sequência travou alunos, troque temporariamente para o modo de agendamento por data ou desative o drip para destravar a contagem.
    Modo travante: Course Content Available Sequentially
    Alternativa: Schedule Course Contents by Date
  4. Recontar o progresso e limpar o cache de objetos: Depois de corrigir a causa, force o Tutor LMS a recalcular limpando o cache transiente e o cache de objetos. Rode os comandos via WP-CLI no servidor para descartar valores de progresso em cache sem precisar editar registro a registro.
    wp cache flush
    wp transient delete --all
    wp tutor regenerate_course_progress
    wp option update tutor_completed_lesson_meta_prefix _tutor_completed_lesson_id_
PHP
<?php
// Diagnostico: imprime o progresso REAL gravado no banco para um aluno e curso,
// ignorando qualquer cache de pagina. Rode via snippet (logado como admin).
add_shortcode( 'tutor_progresso_debug', function () {
	$user_id   = get_current_user_id();
	$course_id = isset( $_GET['curso'] ) ? absint( $_GET['curso'] ) : 0;
	if ( ! $user_id || ! $course_id || ! function_exists( 'tutor_utils' ) ) {
		return 'Informe ?curso=ID e esteja logado.';
	}

	$percent = tutor_utils()->get_course_completed_percent( $course_id, $user_id );
	$lessons = tutor_utils()->get_lesson_count_by_course( $course_id );
	$done    = tutor_utils()->get_completed_lesson_count_by_course( $course_id, $user_id );

	return sprintf(
		'Aluno %d no curso %d: %d/%d aulas concluidas = %d%% (valor real no banco).',
		$user_id, $course_id, $done, $lessons, $percent
	);
} );

Perguntas frequentes

Por que o progresso do aluno no Tutor LMS não atualiza mesmo depois de concluir a aula?
Na maioria dos casos a página da aula está sendo servida pelo cache: o aluno conclui, a página recarrega, mas o HTML vem do cache com a barra de progresso antiga. Excluir as URLs de curso, aula e quiz do plugin de cache resolve o problema na origem.
A barra de progresso está travada em uma porcentagem fixa. O que fazer primeiro?
Limpe todo o cache (página, objeto e CDN) e recarregue a aula com o cache do navegador desativado. Se a porcentagem mudar, o cache era a causa e você deve adicionar as páginas de curso à lista de exceções permanente do plugin de cache.
Onde o Tutor LMS guarda o progresso de cada aluno?
Cada aula concluída vira um registro user meta com prefixo _tutor_completed_lesson_id na tabela wp_usermeta, e a conclusão do curso é registrada como um comentário do tipo course_completed. A porcentagem do curso é calculada em tempo real por get_course_completed_percent.
O botão Marcar como concluída não faz nada. Como diagnosticar?
Abra o console do navegador na aba Network e clique no botão. Se a requisição para admin-ajax.php com a ação tutor_mark_lesson_complete retornar 403 ou 0, há um firewall ou plugin de segurança bloqueando a chamada e você precisa liberar essa ação.
O Content Drip pode fazer o progresso parecer travado?
Sim. No modo Course Content Available Sequentially, se uma aula anterior não foi concluída, o Tutor LMS não libera nem contabiliza as próximas. Revise a ordem das aulas ou troque para o agendamento por data para destravar o aluno.
O relatório do instrutor mostra concluído mas o aluno vê incompleto. Por quê?
Esse descompasso quase sempre é cache de objeto ou registros _tutor_completed_lesson_id duplicados após uma migração. Rode wp cache flush e wp transient delete --all para forçar o recálculo e alinhar as duas telas.
Preciso editar o banco de dados para corrigir o progresso?
Na maioria das vezes não. Excluir as páginas do cache, liberar a ação AJAX e limpar os transientes resolve sem tocar no banco. Só edite a tabela wp_usermeta com backup feito quando houver registros de conclusão claramente corrompidos.
Limpar o cache vai apagar o progresso já registrado dos alunos?
Não. O cache guarda apenas a página renderizada e valores temporários, não o histórico de conclusão. Limpar o cache apenas força o Tutor LMS a recalcular e exibir a porcentagem correta a partir dos dados reais.

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