# Como corrigir o Select Field que não funciona no ACF PRO

O ACF Select Field não funciona quando as choices estão no formato errado, quando o Return Format devolve um tipo diferente do que o template espera, ou quando a opção Stylized UI (Select2) deixa de carregar por conflito de scripts no editor.

## O que é Select Field do ACF PRO que não funciona?

O ACF Select Field é um campo de seleção do Advanced Custom Fields que mostra uma lista de opções (choices) para o editor escolher uma ou várias. Cada opção é definida em Choices, uma por linha, e aceita o formato valor : Rótulo para separar o que fica gravado no banco do texto exibido. O que o campo entrega ao template é controlado pelo Return Format, que pode ser Value, Label ou Both (Array), segundo a documentação oficial do ACF.

Quando se diz que o Select Field não funciona, geralmente um destes comportamentos aparece: o campo abre vazio porque as choices não foram preenchidas, o valor selecionado não casa com o esperado porque o Return Format está em Label em vez de Value, a seleção múltipla retorna um array onde o tema esperava texto, ou a interface de busca Stylized UI (que ativa a biblioteca Select2) não carrega por conflito de JavaScript. São problemas de configuração e de leitura no template, não de bug do plugin.

## Como identificar

- O Select Field abre vazio no editor, sem nenhuma opção na lista, mesmo com o grupo de campos ativo.
- O valor escolhido não é salvo ou volta ao padrão ao reabrir o post para edição.
- No frontend a chamada the_field('cor') imprime 'Array' ou nada, em vez do texto da opção selecionada.
- Com 'Select Multiple Values?' ligado, get_field retorna um array e o tema quebra ao tratar como string.
- A caixa de busca da opção 'Stylized UI' não aparece e o campo vira um select HTML simples, sem o Select2.
- Ao usar 'Allow Null', a opção '- Select -' não some e o campo aceita ficar sem valor onde deveria ser obrigatório.

**Antes de começar:** Antes de editar o functions.php ou desativar plugins e trocar o tema em produção, faça um backup completo do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging, para reverter caso o editor ou o frontend quebrem.

## Como prevenir

- Sempre defina as Choices no formato valor : Rótulo, uma por linha, para que o valor gravado fique estável mesmo que o texto exibido mude depois.
- Padronize o Return Format como Value nos campos usados em comparações de código, evitando que o template dependa do texto traduzível do rótulo.
- Documente quais Select Fields usam seleção múltipla, para que o time saiba que esses campos retornam array e trate sempre com implode ou laço.
- Ao popular choices por código, centralize a lógica em um único filtro acf/load_field versionado no tema ou plugin, em vez de editar as opções manualmente no painel.

Erros relacionados

- [Como corrigir o Relationship Field no ACF PRO](https://full.services/wp-fixer/corrigir-relationship-field-acf-pro/)
- [Como corrigir a Conditional Logic que não funciona no ACF PRO](https://full.services/wp-fixer/corrigir-conditional-logic-acf-pro/)
- [Como corrigir Custom Fields que não aparecem no frontend no ACF PRO](https://full.services/wp-fixer/corrigir-custom-fields-frontend-acf-pro/)

## Causa

- As Choices foram digitadas no formato errado: em vez de uma opção por linha (ou valor : Rótulo), tudo ficou em uma linha só ou com separador inválido, então o ACF não monta a lista e o campo abre vazio.
- O Return Format está em 'Label' enquanto o template compara o resultado de get_field com o valor (slug), fazendo a condição falhar mesmo com a opção certa selecionada.
- A opção 'Select Multiple Values?' está ligada: o ACF passa a devolver um array de valores, e o template que usa the_field ou concatena como string imprime 'Array' ou quebra.
- A opção 'Stylized UI' depende da biblioteca Select2 carregada pelo ACF; um conflito de JavaScript com outro plugin ou tema interrompe esse script e a busca não inicializa, deixando o select sem a interface estilizada.
- O campo é populado dinamicamente por código, mas o filtro acf/load_field/name= não está atribuindo o array $field['choices'] no formato valor => rótulo, então nenhuma opção chega ao editor.
- A regra de localização do grupo de campos ou o status Active desligado fazem o Select Field nem aparecer no post sendo editado, dando a impressão de que o campo não funciona.

## Como resolver

1. Confira o formato das Choices: Abra o grupo de campos e edite o Select Field. No campo Choices, garanta uma opção por linha. Para separar o valor gravado do texto exibido, use o formato valor : Rótulo, como manda a documentação do ACF. Sem isso o campo abre vazio.

```
Painel WP -> ACF -> Grupos de Campos -> abra o grupo e edite o Select Field
```

2. No campo Choices, escreva uma opção por linha:

```
azul : Azul
verde : Verde
```

3. Ajuste o Return Format ao que o template lê: Ainda nas configurações do campo, defina o Return Format conforme o template. Use Value quando o código compara com o slug gravado, Label quando precisa só do texto exibido, ou Both (Array) quando precisa dos dois. Mismatch aqui faz a condição no tema falhar.

```
Painel WP -> ACF -> Grupos de Campos -> Select Field -> Return Format
Escolha: Value (slug) | Label (texto) | Both (Array)
```

4. Trate a seleção múltipla como array no template: Se 'Select Multiple Values?' estiver ligado, o ACF retorna um array. No template, percorra o array ou una os itens com implode em vez de imprimir direto com the_field, que mostraria a palavra Array.

```
Painel WP -> Select Field -> ligue ou desligue 'Select Multiple Values?' conforme a necessidade
```

5. No template, troque the_field('cor') por:

```
echo implode( ', ', (array) get_field('cor') );
```

6. Isole o conflito que derruba o Stylized UI (Select2): Se a busca da opção Stylized UI não carrega, é conflito de JavaScript. Desative os outros plugins um a um e troque para um tema padrão, recarregando o editor a cada teste, até a interface Select2 voltar. Depois reative o culpado e trate o conflito.

```
Painel WP -> Plugins -> desative os demais plugins um a um
Painel WP -> Aparência -> Temas -> ative um tema padrão (ex.: Twenty Twenty-Four)
Abra o console do navegador (F12 -> Console) e recarregue o editor a cada teste
```

7. Popule choices dinâmicas pelo filtro correto: Quando as opções vêm de código (por exemplo, de uma taxonomia ou tabela), use o filtro acf/load_field do ACF, monte o array $field['choices'] no formato valor => rótulo e retorne o $field. O código de exemplo desta página mostra a estrutura completa.

```
Edite o functions.php do tema filho ou um plugin de site
Adicione um add_filter em acf/load_field/name= com o nome do seu campo
Preencha $field['choices'][ $valor ] = $rotulo e retorne $field
```


## Código

```php
<?php
// Popula as opcoes de um Select Field do ACF dinamicamente.
// Troque 'cor' pelo nome (name) do seu Select Field.
add_filter( 'acf/load_field/name=cor', 'full_load_acf_select_choices' );
function full_load_acf_select_choices( $field ) {
    // Zera as choices antes de montar a lista.
    $field['choices'] = array();

    // Exemplo: monta as opcoes a partir de uma taxonomia.
    $termos = get_terms( array(
        'taxonomy'   => 'category',
        'hide_empty' => false,
    ) );

    if ( ! is_wp_error( $termos ) ) {
        foreach ( $termos as $termo ) {
            // Formato exigido pelo ACF: valor => rotulo.
            $field['choices'][ $termo->slug ] = $termo->name;
        }
    }

    return $field;
}
```

## Perguntas frequentes

### Por que meu Select Field do ACF PRO abre vazio

Na maioria dos casos as Choices não foram preenchidas no formato certo. O ACF espera uma opção por linha e aceita valor : Rótulo para separar o valor gravado do texto exibido. Reabra o campo, escreva uma opção por linha e salve para a lista voltar a aparecer.

### Qual a diferença entre Value, Label e Both no Return Format do Select

Value devolve o valor gravado (o slug), Label devolve só o texto exibido e Both (Array) devolve os dois num array. Escolha Value quando o código compara com o slug e Label quando precisa apenas do texto, segundo a documentação do ACF.

### Por que o Select Field imprime Array no frontend

Isso acontece quando a opção 'Select Multiple Values?' está ligada e o campo retorna um array. Em vez de the_field, percorra o array ou use implode, por exemplo echo implode(', ', (array) get_field('cor')), para exibir os valores como texto.

### Como faço o Select Field salvar o valor escolhido

Confirme que o grupo de campos está com o status Active e que a regra de localização casa com o post editado. Se o valor não persiste, verifique também conflitos de JavaScript no editor que impedem o campo de inicializar antes de salvar.

### O que é a opção Stylized UI do Select Field

A opção Stylized UI ativa a biblioteca Select2, que adiciona busca, carregamento via AJAX e reordenação ao campo. Se ela não carrega, costuma ser conflito de JavaScript com outro plugin ou tema que interrompe o script do Select2 no editor.

### Como populo as opções do Select Field por código

Use o filtro acf/load_field do ACF, no formato acf/load_field/name= seguido do nome do campo. Dentro da função, monte o array $field['choices'] no formato valor => rótulo e retorne o $field, conforme o exemplo da documentação oficial.

### Para que serve a opção Allow Null no Select Field

Allow Null adiciona uma escolha vazia '- Select -' à lista, permitindo deixar o campo sem valor. Se o campo precisa ser obrigatório, desligue Allow Null e ative a validação Required para impedir que fique em branco.

**Fonte:** [Advanced Custom Fields — Select Field](https://www.advancedcustomfields.com/resources/select/)
