Exibir todos os valores de um campo personalizado criado com o ACF em uma página


9

Estou usando campos personalizados avançados / ACF para criar campos personalizados. Uma delas é uma lista de caixas de seleção que exibem algumas opções (opção1, opção2, opção3 ...) .

Agora eu quero exibir todas as opções desse campo em uma página separada no front-end da seguinte forma:

Opções:
- opção 1
- opção 2
- opção 3
- ...

Como posso recuperar todas as opções com chaves do ACF?


Seja um pouco mais claro sobre o que exatamente você está tentando alcançar. O ACF foi criado para mostrar a saída dos campos personalizados no front-end, não para permitir a entrada do front-end.
SickHippie 28/03/12

Respostas:


16

A get_field_objectfunção ACF pode ser usada para obter informações e opções para um campo específico.

Primeiro, você precisa da chave do campo específico que deseja gerar. Ao editar um grupo de campos, clique na guia de opções da tela na parte superior da página. Você deverá ver uma opção para alternar a exibição da chave do campo (ela está oculta por padrão para economizar espaço):

Chave do campo

Depois de ter a chave, você pode carregar o objeto de campo e gerar seus valores:

$field_key = "field_5039a99716d1d";
$field = get_field_object($field_key);

if( $field )
{
    echo '<select name="' . $field['key'] . '">';
        foreach( $field['choices'] as $k => $v )
        {
            echo '<option value="' . $k . '">' . $v . '</option>';
        }
    echo '</select>';
}

Seria bom se pudéssemos fazer referência ao nome, tão facilmente quanto usar a chave. dessa maneira, se você tiver isso em um plug-in e sempre precisar testá-lo em outra instância do WordPress com o acf ativado, você não precisará procurar a chave e alterá-la novamente apenas porque está no ambiente B.
klewis

0

Se você estiver tentando produzir algo se uma caixa de seleção estiver marcada, use:

<?php if(in_array('news', get_field('checkbox') )): ?>
    <h1>News was ticked!</h1>
<?php endif; ?>

Se você está tentando exibir apenas uma lista das opções marcadas, use o seguinte:

<p>Categories: <?php get_field('checkbox'); ?></p>

Isso fornecerá uma matriz de valores que você pode gerenciar com uma foreachdeclaração. O uso the_field('checkbox')fornecerá uma sequência separada por vírgula das opções que você também pode dividir.

Eu também sugiro que você vá ao site da ACF e consulte a documentação. A maioria das perguntas desse tipo será respondida lá em detalhes decentes, e o desenvolvedor também está ativo em seus fóruns de suporte.

EDIT: Se você deseja a lista de opções disponíveis em uma página para gerar uma consulta dinâmica, eu tenho exatamente isso. Esta é uma peça que acabei de construir ontem para extrair uma lista de meta-valores de uma determinada chave de campo personalizada (usando o ACF). Eu fiz isso bastante genérico para você. Há outro pedaço de JS para lidar com a solicitação ajax, e um pedaço de php bastante complicado que gera as postagens resultantes. Eu realmente não posso reescrevê-las - o JS é uma chamada / resposta ajax voltada para a frente padrão do WP, e o PHP é uma bagunça de verificações condicionais para os 12 campos diferentes do ACF que estamos exibindo (2 dos quais são repetidores). O básico é esse código aqui, o botão onClickchama a função ajax em um arquivo JS separado, e o php da função ajax em si configura essencialmente uma matriz de argumentos para a consulta,$selectedOptionou $_POST['option']como meta_value. Isso é alimentado com a new WP_Query( $args );, que é então usado em um loop, cuja saída é alimentada de volta aos js via add_action('wp_ajax_the_ajax_hook', 'fetch_option_list');e add_action( 'wp_ajax_nopriv_the_ajax_hook', 'fetch_option_list' ); //for non logged-in users.

 // Get list of meta_values for given meta_key and post_type (page, post, custom post type)
 function meta_list($key = '', $type = '', $status = 'publish'){
 global $wpdb;
    $r = $wpdb->get_col($wpdb->prepare( "
    SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
    WHERE pm.meta_key = '%s'
    AND p.post_status = '%s'
    AND p.post_type = '%s'
    ORDER BY pm.meta_value ASC", $key, $status, $type));
    return $r;
}

 // ADD EG A FORM TO THE PAGE
 function meta_ajax_frontend(){
    $formlist = meta_list('metakey', 'posttype');
    echo '<form id="optionSelect">';
    echo '<select id="optionList" name="optionList">';
    foreach($formlist as $fl => $val) {
        echo '<option>' . $val . '</option>';
    }
    echo '</select>';
    echo '<input name="action" type="hidden" value="the_ajax_hook" />
    <input id="submit_button" value = "Search" type="button" onClick="fetch_meta();" />
    </form>
    <div id="meta_list">
    Please select an option from the list
    </div>';
 }

Mm, se eu fizer isso, exibirei as opções atribuídas ao "post", o que eu preciso é mostrar todas as opções em uma "página" como uma lista completa de opções.
28412 Bob

Estou curioso para saber por que você precisa da lista de opções do back-end exibida no front-end. Deseja apenas exibir a lista de opções com os itens selecionados no administrador selecionado? Se você estiver tentando usá-lo como parte de um formulário (permitindo a alteração dos dados verificados pelo usuário), este não é o plug-in ou o método certo para fazê-lo. No entanto, se você deseja que a lista de opções seja usada como pré-filtro para reescrever a consulta, eu posso ter exatamente o que você precisa. Vou editar minha postagem acima com esse código aqui em breve.
SickHippie 28/03/12

Olá, sou Bob com outro acesso, preciso das opções do back-end para criar uma espécie de "menu" com eles. Eu acho que seu código recupera postagens e as opções atribuídas a elas. Eu só preciso da lista de opções como a que aparece no back-end quando você cria uma postagem. Continuarei trabalhando com seu código para ver se consigo descobrir alguma coisa. Obrigado @SickHippie
Dunning-Kruger

Não, ele puxa a lista de opções que foram selecionadas nessa caixa de seleção - ou seja, diz "aqui está a caixa de seleção, existem postagens às quais foram atribuídos valores 'opção 1', 'opção 2', 'opção 4' literalmente, apenas puxa a lista de meta_value com base nessa meta_key. Eu precisava dela para uma lista dinâmica, mas se você criou um post de rascunho com todas as caixas de seleção selecionadas, ele puxará todas as opções em uma matriz para você. Eu estou usando a foreachpercorrer as funções posteriores trazem a lista de mensagens via Ajax, mas deixei que pouco fora..
SickHippie
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.