# Como corrigir custom fields do ACF PRO que não exibem em cursos do Tutor LMS no WordPress

Os custom fields do ACF PRO não aparecem em cursos do Tutor LMS quando a regra de localizacao do grupo de campos não casa com o tipo de post courses, quando o template do curso chama os campos fora do loop sem informar o ID do curso, ou quando o nome do campo no código não bate com o registrado no ACF.

## 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.

**Antes de começar:** Antes de criar template overrides ou editar arquivos do tema em producao, faça um backup completo do site (arquivos e banco de dados) ou trabalhe primeiro em um ambiente de staging, para reverter sem risco caso a página do curso quebre.

## 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.

Erros relacionados

- [Como corrigir Custom Fields que não aparecem no frontend no ACF PRO](https://full.services/wp-fixer/corrigir-custom-fields-frontend-acf-pro/)
- [Como corrigir Custom Fields que não exibem no frontend no ACF PRO](https://full.services/wp-fixer/corrigir-custom-fields-nao-exibem-acf-pro/)
- [Como corrigir a incompatibilidade do ACF PRO com o editor Gutenberg](https://full.services/wp-fixer/corrigir-compatibilidade-gutenberg-acf-pro/)

## 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

1. 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
```

2. 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
```

3. 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);
```

4. 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
```

5. 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
```


## Código

```php
<?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 )
    );
}
```

## Perguntas frequentes

### Por que meus custom fields do ACF não aparecem na página do curso do Tutor LMS

Na maioria dos casos a regra de localizacao do grupo de campos não mira o tipo de post Cursos do Tutor LMS, entao o ACF nunca anexa os campos ao curso. Abra o grupo em ACF -> Grupos de Campos e defina a localizacao para 'Tipo de Post e igual a Cursos'.

### Preciso passar o ID do curso para o get_field do ACF

Sim, quando o código roda fora do loop principal. O Tutor LMS monta a página do curso por seus templates, entao informe o ID como segundo parametro, por exemplo get_field('campo', get_the_ID()). Sem o ID o ACF le o post global errado e retorna vazio.

### Qual a diferenca entre the_field e get_field do ACF

Segundo a documentação do ACF, the_field exibe o valor diretamente na tela e get_field retorna o valor como variavel para você tratar antes de imprimir. Use the_field para saida direta e get_field quando precisar validar ou formatar o dado.

### Devo usar o field name ou o field key no get_field

Use o field name, o nome do campo definido no grupo (ex.: carga_horaria), e não o field key (que comeca com field_). A grafia precisa bater exatamente com o registrado no ACF, com underline e minusculas no padrão.

### Como exibir um campo do ACF de um curso específico por ID

Passe o ID do curso como segundo parametro, como em get_field('carga_horaria', 123) ou the_field('carga_horaria', 123). Para o curso em exibicao, use get_the_ID() no lugar do número para pegar o ID dinamicamente.

### Os campos aparecem em posts comuns mas somem no curso do Tutor LMS

Isso aponta para a regra de localizacao restrita a posts ou páginas. Adicione uma regra que inclua o tipo de post Cursos, ou ajuste a existente, para que o mesmo grupo de campos seja anexado também aos cursos do Tutor LMS.

### Onde devo colocar o código que exibe os campos no curso

Em um template override do Tutor LMS dentro do tema ou tema filho, copiando o template do curso de plugins/tutor/templates/ para a pasta tutor do seu tema. Assim o ajuste sobrevive as atualizações do plugin e do tema.

**Fonte:** [Advanced Custom Fields — Displaying Values in Your Theme](https://www.advancedcustomfields.com/resources/displaying-custom-field-values-in-your-theme/)
