Como corrigir o Select Field que não funciona no ACF PRO
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.
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.
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
- 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 - No campo Choices, escreva uma opção por linha:
azul : Azul verde : Verde - 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) - 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 - No template, troque the_field('cor') por:
echo implode( ', ', (array) get_field('cor') ); - 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 - 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
<?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;
}














