Como corrigir custom fields do JetEngine que não exibem em cursos do Tutor LMS no WordPress
O que é custom fields do JetEngine que não exibem em cursos do Tutor LMS?
O JetEngine cria custom fields através de Meta Boxes anexadas a um object context específico: um post type, uma taxonomia, um usuário ou uma options page. O valor so e gravado e lido a partir desse contexto. Para exibir o dado, você usa o widget Dynamic Field (no Elementor, Bricks ou nos blocos do Gutenberg) ou um Listing Item, sempre indicando a fonte Meta Data e o nome exato do meta field. Quando a fonte ou o object context não casam com o objeto que esta sendo renderizado, o campo retorna vazio.
O Tutor LMS registra os cursos como um custom post type próprio (courses), com páginas montadas por templates internos do plugin. A incompatibilidade aparece quando a Meta Box do JetEngine foi criada para o post type errado, quando o Dynamic Field e colocado em um Listing ou template cujo objeto atual não e o curso, ou quando o nome do meta field digitado no widget não bate com a chave gravada. Nesses casos o campo existe no banco, mas não aparece na página do curso porque o JetEngine consulta o objeto ou a chave errada na hora de renderizar.
Como identificar
- O custom field do JetEngine aparece em branco na página do curso do Tutor LMS, mesmo com o valor preenchido na tela de edição do curso.
- No editor do Listing Item ou do template do Elementor o Dynamic Field mostra ‘No data’ ou simplesmente não renderiza nenhum texto.
- A Meta Box do JetEngine não aparece na tela de edição do curso (Courses), so em posts ou páginas comuns.
- O valor do campo some quando o curso e exibido por um Listing Grid, mas aparece quando você abre o post diretamente, ou vice-versa.
- O shortcode ou a tag dinâmica do JetEngine retorna vazio dentro de um conteúdo que o Tutor LMS injeta na página do curso.
Como prevenir
- Sempre crie a Meta Box do JetEngine já vinculada ao post type Courses ao planejar campos para cursos do Tutor LMS, evitando campos orfaos em Posts ou Pages.
- Padronize as chaves dos meta fields com nomes curtos e em minusculas, e reutilize exatamente a mesma chave no widget Dynamic Field para evitar erros de digitacao.
- Documente o Object Context esperado de cada Listing Item e template de curso, para que novos campos herdem o contexto correto do queried object.
- Valide novos campos sempre na URL pública do curso e não apenas na previa do editor, já que o queried object do Tutor LMS so e resolvido no frontend.
Causa
- A Meta Box do JetEngine foi criada com a opção 'Meta Box for' apontando para Posts ou Pages, e não para o post type Courses do Tutor LMS, entao o campo nunca e anexado nem gravado no objeto do curso.
- O widget Dynamic Field esta com a fonte Meta Data correta, mas o nome do meta field digitado no campo Meta Field não bate exatamente com a chave do field registrado no JetEngine (diferenca de letra, espaco ou maiuscula).
- O Dynamic Field foi colocado dentro de um Listing Item ou template cujo Object Context resolve para um objeto diferente do curso (por exemplo, o post da página pai e não o item do loop), fazendo o JetEngine ler o meta de outro objeto.
- O Listing Grid que monta a área de cursos esta com a fonte (Listing source / Posts query) apontando para um post type diferente de Courses, de modo que o item renderizado não e o curso que contem o meta field.
- O custom field foi adicionado ao curso depois que o Tutor LMS já havia salvo o post, e o template do curso e renderizado por um hook do Tutor que não expoe o queried object para o Dynamic Field, deixando o JetEngine sem o objeto atual para consultar.
Como resolver
- Atribua a Meta Box do JetEngine ao post type Courses: Abra a Meta Box do JetEngine que contem o campo e confirme que ela esta vinculada ao post type dos cursos do Tutor LMS, e não a Posts ou Pages. Sem esse vinculo o campo nem aparece na edição do curso e nunca grava o valor no objeto certo.
Painel WP -> JetEngine -> Meta Boxes -> abra a Meta Box do campo No bloco 'Meta Box for', selecione 'Post Type' e escolha 'Courses' Salve a Meta Box e reabra um curso para confirmar que o campo aparece na edição - Confirme o nome exato do meta field: Compare a chave do field cadastrada no JetEngine com o nome digitado no widget Dynamic Field. O JetEngine le o meta pela chave literal, entao qualquer diferenca de caractere faz o campo retornar vazio.
Painel WP -> JetEngine -> Meta Boxes -> anote o valor do campo 'Name/ID' do field No editor, selecione o widget Dynamic Field -> Source: Meta Data No campo 'Meta Field', cole exatamente a mesma chave (sem espacos ou maiusculas extras) - Ajuste o Object Context do Dynamic Field: Se o campo esta dentro de um Listing Item ou de um template, abra as opções de Object Context do widget e aponte para o objeto que e o curso (o item atual do loop ou o queried object), para que o JetEngine leia o meta do curso certo.
Selecione o widget Dynamic Field -> abra 'Object Context' Dentro de um Listing Item, escolha 'Default Object' (o item atual do loop) Em um template de página única, use 'Current Post' / 'Queried object' para apontar ao curso - Corrija a fonte do Listing Grid de cursos: Se os cursos são listados por um Listing Grid, confirme que o Listing usado tem a fonte definida como o post type Courses. Um Listing com fonte de outro post type renderiza itens que não contem o meta field.
Painel WP -> JetEngine -> Listings -> abra o Listing usado na grade Em 'Listing source' selecione 'Posts' e em 'From post type' escolha 'Courses' No Listing Grid, selecione esse Listing e recarregue a página para validar - Limpe o cache e valide na página do curso: Depois de ajustar contexto e fonte, limpe os caches de página e do Elementor e abra a página real do curso (não so a previa do editor), porque o template do Tutor LMS so resolve o queried object no frontend.
Painel WP -> Elementor -> Tools -> Regenerate CSS & Data Limpe o cache do plugin de cache ativo (ex.: WP Rocket -> Limpar cache) Abra a URL pública do curso e confirme que o custom field aparece preenchido
<?php
/**
* Exibe um meta field do JetEngine na pagina do curso do Tutor LMS
* usando o ID do curso renderizado (queried object), com a chave exata.
*/
add_action( 'tutor_course/single/after/title', 'full_jetengine_course_meta' );
function full_jetengine_course_meta() {
$course_id = get_the_ID();
if ( ! $course_id ) {
return;
}
// 'duracao_curso' deve bater com a chave registrada na Meta Box do JetEngine.
$valor = get_post_meta( $course_id, 'duracao_curso', true );
if ( '' === $valor || null === $valor ) {
return;
}
printf( '<p class="full-course-meta">%s</p>', esc_html( $valor ) );
}














