Como corrigir custom field do ACF que não exibe em cursos do Tutor LMS no WordPress
O que é ACF custom field que não exibe em cursos do Tutor LMS?
Um custom field do ACF Tutor LMS é um campo personalizado que você anexa ao tipo de post de cursos (o CPT courses, registrado pelo Tutor LMS) por meio de um grupo de campos do ACF, e que depois é lido na página do curso com get_field ou the_field. O problema aparece quando esse campo, visível e preenchido no editor do curso, simplesmente não aparece na página pública do curso, ou some também do próprio editor.
A documentação do ACF é direta neste ponto: um grupo de campos só aparece em um tipo de post quando a regra de localização casa com aquele tipo de post, e o valor só é recuperado quando get_field recebe o objeto ou o ID do post certo. Como o Tutor LMS usa um CPT próprio para cursos e renderiza a página por templates próprios (single de curso e loop de curso), os dois pontos de falha mais comuns são a regra de localização não mirar o CPT courses e o template chamar get_field fora do contexto do curso, sem passar o ID do curso. Quando isso ocorre, o postmeta existe no banco, mas nada é impresso na tela.
Como identificar
- O valor do campo aparece preenchido ao editar o curso no painel, mas a página pública do curso no Tutor LMS não mostra o conteúdo do campo em lugar nenhum.
- A chamada the_field(‘meu_campo’) ou get_field(‘meu_campo’) retorna vazio ou false dentro do template de curso, mesmo com o campo salvo.
- O grupo de campos do ACF nem chega a aparecer no editor do curso, embora apareça normalmente em posts e páginas comuns.
- O campo aparece na lista de cursos (loop) mas some na página individual do curso, ou o contrário, porque o ID do post muda entre os dois contextos.
- Ao usar get_field sem informar o ID, o valor exibido é o de outro post (a página de arquivo ou a Home), e não o do curso aberto.
Como prevenir
- Ao criar campos para cursos, defina a regra de localização do grupo já mirando o tipo de post Curso do Tutor LMS, e não Post ou Página por hábito.
- Sempre passe o ID do curso como segundo argumento de get_field nos templates do Tutor LMS, em vez de confiar no post global dentro dos loops do plugin.
- Padronize a leitura dos campos com o nome exato do field name do ACF e documente as meta keys usadas em cada template de curso.
- Sobrescreva os templates do Tutor LMS sempre em tema filho e chame wp_reset_postdata após qualquer loop secundário para não corromper o contexto do post.
Causa
- A regra de localização do grupo de campos no ACF está apontando para Post ou Página, e não para a opção Tipo de Post igual a Curso (o CPT courses do Tutor LMS), então o grupo nunca casa com a tela de edição do curso.
- O template do curso (single de curso ou loop renderizado pelo Tutor LMS) chama get_field('campo') sem passar o ID do curso, e nesse contexto o get_the_ID retorna o ID da página de arquivo do Tutor LMS, não o do curso, devolvendo valor vazio.
- O grupo de campos está com o status Active desligado em ACF, Grupos de Campos, fazendo o campo sumir tanto do editor do curso quanto da leitura por get_field.
- A meta key consultada no template difere do nome real do campo no ACF (por exemplo um typo ou um campo dentro de um grupo de repetição), então get_field('campo') não encontra o postmeta gravado.
- Um template de curso sobrescrito do Tutor LMS roda dentro de um loop secundário sem wp_reset_postdata, deixando o objeto global de post apontando para outro item quando o the_field é executado.
Como resolver
- Aponte a regra de localização para o tipo de post Curso: Em ACF, Grupos de Campos, abra o grupo que deveria aparecer no curso e ajuste a regra de localização para mirar o tipo de post de cursos do Tutor LMS. O dropdown do ACF lista os tipos de post registrados, então o curso aparece como uma opção depois que o Tutor LMS está ativo.
Painel WP -> ACF -> Grupos de Campos -> abra o grupo Em Localização, defina: Tipo de Post -> é igual a -> Curso Salve o grupo de campos - Confirme que o grupo de campos está Ativo: Ainda na tela do grupo de campos, garanta que o status está marcado como Active. Um grupo inativo não aparece no editor do curso nem é lido por get_field na página pública.
Painel WP -> ACF -> Grupos de Campos Confirme que o grupo está com o status Active (Ativo) e não Inactive - Passe o ID do curso ao chamar get_field no template: No template de curso do Tutor LMS, nunca confie no post global dentro de loops do plugin. Recupere o ID do curso de forma explícita com get_the_ID dentro do The Loop, ou guarde o ID antes do loop secundário, e passe esse ID como segundo argumento de get_field para ler o meta do curso certo.
Edite o template do curso (tema filho ou pasta de override do Tutor LMS) Use: $course_id = get_the_ID(); Use: echo get_field('meu_campo', $course_id); - Confira o nome exato do campo no ACF: Abra o campo dentro do grupo e copie o Nome do Campo (field name), não o rótulo. A meta key usada em get_field precisa ser idêntica a esse nome. Para campos dentro de grupos ou repetidores, use a função correspondente do ACF em vez de get_field direto.
Painel WP -> ACF -> Grupos de Campos -> abra o campo Copie o valor do campo Nome (ex.: carga_horaria) e use o mesmo em get_field('carga_horaria', $course_id) - Restaure o post global após loops secundários: Se o template do curso usa WP_Query ou loops auxiliares antes de imprimir o campo, chame wp_reset_postdata após cada loop para devolver o objeto global de post ao curso atual. Sem isso, the_field lê o meta do último item do loop, não o do curso.
Após cada WP_Query no template, adicione: wp_reset_postdata(); Só então chame the_field('meu_campo') para o curso atual
<?php
/**
* Exibe um ACF custom field na pagina de curso do Tutor LMS
* de forma segura, passando sempre o ID do curso.
* Cole no template single de curso (override em tema filho).
*/
$course_id = get_the_ID();
$carga = get_field( 'carga_horaria', $course_id );
if ( $carga ) {
printf(
'<p class="tutor-course-meta">Carga horaria: %s</p>',
esc_html( $carga )
);
}
// Exemplo com loop secundario: resetar o post global depois.
$relacionados = new WP_Query( array(
'post_type' => 'courses',
'posts_per_page' => 3,
) );
while ( $relacionados->have_posts() ) {
$relacionados->the_post();
echo esc_html( get_field( 'subtitulo', get_the_ID() ) );
}
wp_reset_postdata(); // devolve o post global ao curso atual














