Como corrigir custom fields do ACF PRO que não exibem em cursos do Tutor LMS no WordPress
O que é ACF PRO custom fields que não exibem em cursos do Tutor LMS?
O ACF PRO permite anexar grupos de campos a praticamente qualquer tipo de conteúdo do WordPress por meio de regras de localizacao, e os cursos do Tutor LMS são um Custom Post Type próprio (slug courses). Para os valores aparecerem, o grupo de campos precisa estar localizado nesse tipo de post e o template que monta a página do curso precisa ler cada campo com get_field() ou the_field(), as funções oficiais que a documentação do ACF indica para recuperar e exibir valores no tema.
O problema surge quando essa ponte se quebra. Como o Tutor LMS renderiza a página do curso por seus próprios templates (muitas vezes via shortcode, hook ou template override do tema), o código que exibe o campo costuma rodar fora do loop principal do WordPress. Nesse cenario, a documentação do ACF e clara: e preciso passar o ID do post como segundo parametro de get_field(), porque sem ele a função tenta ler o post errado e retorna vazio. Some a isso uma regra de localizacao que não mira o CPT courses ou um nome de campo digitado errado, e os custom fields somem da página do curso mesmo com tudo preenchido no admin.
Como identificar
- Os custom fields preenchidos no editor do curso aparecem em branco na página pública do curso no Tutor LMS, sem nenhuma mensagem de erro.
- Ao usar ‘the_field’ o template imprime nada, e ao usar ‘get_field’ um var_dump retorna ‘bool(false)’ ou ‘NULL’ no lugar do valor.
- Os campos aparecem normalmente quando você edita um post ou página comum, mas somem especificamente nas páginas de curso do Tutor LMS.
- O grupo de campos não oferece a opção do curso ao configurar a regra de localizacao, ou a lista ‘Tipo de Post’ não mostra a opção Cursos.
- O campo so exibe valor dentro do loop padrão do tema, mas fica vazio quando chamado dentro de um shortcode ou template override do Tutor LMS.
Como prevenir
- Ao criar grupos de campos para conteúdo do Tutor LMS, defina a regra de localizacao no tipo de post Cursos logo na criação e marque o grupo como Active.
- Padronize a leitura de campos em templates de curso sempre passando o ID do curso (get_the_ID()) como segundo parametro de get_field, já que o Tutor LMS renderiza fora do loop principal.
- Mantenha um inventario dos field names usados em cada template para evitar divergencia de grafia entre o ACF e o código.
- Coloque o código de exibicao em um tema filho ou em template overrides do Tutor LMS, nunca editando os arquivos do plugin, para sobreviver as atualizações.
Causa
- A regra de localizacao do grupo de campos no ACF não inclui 'Tipo de Post e igual a Cursos' (CPT courses do Tutor LMS), entao o ACF nunca anexa esses campos a um curso e get_field retorna vazio na página.
- O template do curso chama get_field() ou the_field() fora do loop principal (dentro de um shortcode, hook ou template override do Tutor LMS) sem passar o ID do curso como segundo parametro, fazendo o ACF ler o post global errado e retornar false.
- O nome do campo (field name) usado no código não bate com o name registrado no grupo de campos do ACF (erro de digitacao, hifen no lugar de underline, ou uso do field key em vez do field name), e o ACF não encontra o valor.
- O grupo de campos esta com o status Active desativado em ACF -> Grupos de Campos, entao ele não e carregado para nenhum post, inclusive os cursos.
- O template do curso e renderizado via REST API ou AJAX do Tutor LMS (carregamento dinâmico), contexto em que o post global não esta definido e o ID do curso precisa ser informado explicitamente ao get_field().
Como resolver
- Aponte a regra de localizacao para o tipo de post Cursos: Abra o grupo de campos no ACF e confirme que a regra de localizacao mira o CPT do Tutor LMS. Sem essa regra o ACF não anexa os campos ao curso e nada e exibido na página.
Painel WP -> ACF -> Grupos de Campos -> abra o grupo Em Configurações de Localizacao defina: Mostrar este grupo se 'Tipo de Post' e igual a 'Cursos' Confirme que o status do grupo esta marcado como Active e clique em Salvar - Confirme o nome exato de cada campo: Verifique o name de cada campo no editor do grupo e use exatamente esse valor no código. A documentação do ACF usa o field name (não o field key) em get_field e the_field, e a grafia precisa bater caractere a caractere.
Painel WP -> ACF -> Grupos de Campos -> abra o campo e leia o valor do Nome do Campo (ex.: carga_horaria) Use o mesmo nome no código: the_field('carga_horaria') Evite hifens e maiusculas: o name padrão usa underline e minusculas - Passe o ID do curso ao ler o campo fora do loop: Como o Tutor LMS monta a página do curso fora do loop principal, informe o ID do curso como segundo parametro de get_field e the_field. A documentação do ACF indica esse parametro para recuperar valores de um post específico.
Recupere o ID do curso atual: $course_id = get_the_ID(); Leia o campo com o ID: $valor = get_field('carga_horaria', $course_id); Para exibir direto: the_field('carga_horaria', $course_id); - Use o template override do tema, não edite o plugin: Coloque o código de exibicao em uma copia do template do curso dentro do tema (ou tema filho), na pasta tutor de templates do Tutor LMS, para não perder o ajuste na próxima atualização do plugin.
Copie o template do curso de wp-content/plugins/tutor/templates/ para wp-content/themes/seu-tema/tutor/ Edite a copia no tema e insira a chamada get_field('campo', get_the_ID()) Recarregue a página do curso para confirmar o valor exibido - Diagnostique o retorno do campo com um teste rápido: Se ainda vier vazio, faca um teste de depuração para ver se o ACF retorna false (campo não encontrado) ou string vazia (campo sem valor). Isso separa um erro de nome ou localizacao de um campo simplesmente não preenchido.
Insira temporariamente no template: var_dump( get_field('carga_horaria', get_the_ID()) ); Resultado bool(false) ou NULL indica nome ou localizacao errados (volte ao passo 1 e 2) Resultado string vazia indica campo não preenchido naquele curso específico
<?php
// Exibe um custom field do ACF na pagina de curso do Tutor LMS.
// Coloque em um template override (tema/tutor/) ou via hook do Tutor LMS.
add_action( 'tutor_course/single/after/title', 'full_render_acf_course_field' );
function full_render_acf_course_field() {
// Garante que o ACF esta ativo antes de chamar get_field.
if ( ! function_exists( 'get_field' ) ) {
return;
}
// ID do curso em exibicao (o template roda fora do loop principal).
$course_id = get_the_ID();
if ( ! $course_id ) {
return;
}
// Passa o ID como 2o parametro: sem ele o ACF le o post global errado.
$carga_horaria = get_field( 'carga_horaria', $course_id );
if ( $carga_horaria === false || $carga_horaria === '' || $carga_horaria === null ) {
return; // Campo sem valor, nome errado ou localizacao nao casa.
}
printf(
'<p class="curso-carga-horaria">Carga horaria: %s</p>',
esc_html( $carga_horaria )
);
}














