Como corrigir a incompatibilidade do Tutor LMS com PHP 8.3
O que é a incompatibilidade do Tutor LMS com PHP 8.3?
A incompatibilidade do Tutor LMS com PHP 8.3 é o conjunto de avisos e erros que aparece quando uma versão antiga do plugin de cursos roda num host já atualizado para o PHP 8.3. A documentação do Tutor LMS exige PHP 7.4 ou superior e a versão 2.6.0 confirmou compatibilidade até o PHP 8.2; o 8.3 ficou fora dessa homologação. Por isso, construções do plugin anteriores ao suporte ao 8.3 disparam avisos de Deprecated (como criação de propriedade dinâmica em classe e passagem de null para parâmetro que não aceita null) e, em pontos específicos do editor de cursos e do construtor de quiz, podem evoluir para erro fatal que derruba a tela. O site segue funcionando para o visitante na maioria dos casos; o problema concentra-se no painel e nas telas do próprio Tutor LMS.
Como identificar
- Avisos repetidos no formato “Deprecated: Creation of dynamic property” citando uma classe do diretório wp-content/plugins/tutor, gravados no debug.log.
- Mensagem “Deprecated: trim(): Passing null to parameter #1 of type string is deprecated” ou variações com strlen, explode e htmlspecialchars apontando arquivos do Tutor LMS.
- Erro fatal “Uncaught TypeError” ou tela branca ao salvar um curso, publicar uma aula ou abrir o construtor de quiz do Tutor LMS.
- O painel de cursos do Tutor LMS carrega quebrado ou em branco logo após o host migrar o plano para o PHP 8.3.
Como prevenir
- Antes de migrar o host para uma versão nova do PHP, confira em Saúde do Site se os plugins ativos, incluindo o Tutor LMS, declaram suporte àquela versão
- Mantenha o Tutor LMS Free, o Tutor LMS Pro e todos os addons sempre na mesma geração e atualizados juntos
- Em produção, deixe WP_DEBUG_DISPLAY como false e acompanhe o debug.log para pegar avisos de Deprecated antes que virem erro fatal
- Teste a troca de versão do PHP primeiro num ambiente de staging, com o construtor de cursos e o de quiz, antes de aplicar no site no ar
Causa
- Versão do Tutor LMS anterior ao suporte ao PHP 8.3 rodando num servidor já no PHP 8.3, enquanto a documentação homologa apenas até o PHP 8.2.
- Servidor configurado em PHP 8.3 com WP_DEBUG e WP_DEBUG_DISPLAY ligados, expondo na tela cada aviso de Deprecated emitido pelo plugin.
- Tutor LMS Pro ou um addon do Tutor LMS em versão desatualizada, incompatível com a versão Free já atualizada e com o PHP 8.3.
- Criação de propriedade dinâmica em classes do plugin, que o PHP 8.2 marcou como Deprecated e o PHP 8.3 mantém, comum em código escrito para o PHP 7.4.
- Funções de string do plugin recebendo null onde o PHP 8.3 espera string, como em campos de curso ou de aula deixados vazios.
Como resolver
- Confirme a versão do PHP do servidor: antes de tudo, identifique em qual versão o host está rodando. Crie um arquivo de teste na raiz ou use a Saúde do Site do WordPress, em Ferramentas, para ver a versão ativa do PHP.
wp-admin -> Ferramentas -> Saúde do site -> Informações -> Servidor - Atualize o Tutor LMS e o Tutor LMS Pro: a correção principal é usar a versão do plugin que já trata o PHP 8.3. Atualize o Tutor LMS Free e, se existir, o Tutor LMS Pro e os addons, para a versão mais recente, sempre com backup antes.
wp-admin -> Plugins -> Atualizações disponíveis wp plugin update tutor wp plugin update tutor-pro - Esconda os avisos do visitante enquanto corrige: se os avisos estão aparecendo na tela em produção, registre-os no log e remova a exibição para o público. Edite o wp-config.php acima da linha que pede para parar de editar.
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_DISPLAY', false ); define( 'WP_DEBUG_LOG', true ); @ini_set( 'display_errors', 0 ); - Identifique o arquivo exato no debug.log: abra o log de depuração e localize as linhas que citam o diretório do Tutor LMS. Elas apontam a classe ou a função que dispara o Deprecated ou o erro fatal, o que confirma se a origem é o Free, o Pro ou um addon.
wp-content/debug.log - Use o PHP 8.2 como medida temporária se a tela ainda quebrar: se a versão atualizada ainda não cobrir o PHP 8.3 e uma tela continuar dando erro fatal, volte o servidor para o PHP 8.2, que é a versão homologada na documentação, pelo painel do host. Mantenha como ponte até a próxima atualização do plugin.
Painel do host -> Selecionar versão do PHP -> 8.2
// Snippet de tema/site que ALIMENTA o Tutor LMS e dispara Deprecated no PHP 8.3
// quando o valor chega null (campo de curso vazio). Proteja antes de passar a funcoes de string.
// ANTES (Deprecated: trim(): Passing null to parameter #1 ... no PHP 8.3):
$resumo = trim( get_post_meta( $course_id, '_tutor_course_summary', true ) );
// DEPOIS — coalescencia nula garante string antes do trim():
$resumo = trim( (string) ( get_post_meta( $course_id, '_tutor_course_summary', true ) ?? '' ) );
// Para silenciar SO os avisos de Deprecated em producao, sem esconder erros fatais:
add_action( 'init', function () {
if ( ! WP_DEBUG_DISPLAY ) {
error_reporting( error_reporting() & ~E_DEPRECATED & ~E_USER_DEPRECATED );
}
} );














