Visualizza tutti i valori di un campo personalizzato creato con ACF su una pagina


9

Sto usando Advanced Custom Fields / ACF per creare campi personalizzati. Uno di questi è un elenco di caselle di controllo che visualizzano alcune opzioni (opzione1, opzione2, opzione3 ...) .

Ora voglio visualizzare tutte le opzioni di questo campo su una pagina separata sul frontend in questo modo:

Opzioni:
- opzione 1
- opzione 2
- opzione 3
- ...

Come posso recuperare tutte le opzioni con i tasti da ACF?


Si prega di essere un po 'più chiari su ciò che esattamente stai cercando di ottenere. ACF è creato per mostrare l'output dei campi personalizzati sul frontend, non per consentire l'input frontend.
SickHippie il

Risposte:


16

La get_field_objectfunzione ACF può essere utilizzata per ottenere informazioni e opzioni per un campo specifico.

Per prima cosa hai bisogno della chiave di campo del campo specifico che desideri produrre. Quando si modifica un gruppo di campi, fare clic sulla scheda delle opzioni dello schermo nella parte superiore della pagina. Dovresti vedere un'opzione per attivare / disattivare la visualizzazione della chiave di campo (è nascosta per impostazione predefinita per risparmiare spazio):

Chiave di campo

Una volta che hai la chiave, puoi caricare l'oggetto campo e produrre i suoi valori:

$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>';
}

Sarebbe bello se potessimo fare riferimento al nome, così come lo è usare la chiave. in questo modo se hai questo in un plugin e hai mai avuto bisogno di testarlo su un'altra istanza di WordPress con acf abilitato, non devi dare la caccia al tasto e cambiarlo di nuovo solo perché sei nell'ambiente B.
klewis

0

Se stai provando a produrre qualcosa se è stata spuntata una casella, usa:

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

Se stai provando a visualizzare solo un elenco delle opzioni selezionate, usa questo:

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

Questo ti darà una serie di valori che puoi gestire con una foreachdichiarazione. L'uso the_field('checkbox')ti darà una stringa separata da virgole delle opzioni che puoi anche dividere.

Suggerirei anche di visitare il sito di ACF e di consultare la documentazione. Alla maggior parte delle domande di questo tipo verrà data risposta in dettaglio decente e lo sviluppatore è attivo anche nei suoi forum di supporto.

EDIT: Se stai cercando la lista delle opzioni disponibili in una pagina per generare una query dinamica, ho la cosa giusta. Questo è un pezzo che ho appena creato ieri per estrarre un elenco di meta valori da una determinata chiave di campo personalizzata (usando ACF). L'ho reso abbastanza generico per te. C'è un altro pezzo di JS per gestire la richiesta Ajax, e un pezzo di php piuttosto contorto che emette i post risultanti. Non riesco davvero a riscriverli: il JS è una chiamata / risposta ajax standard WP rivolta in avanti, e il PHP è un casino di controlli condizionali per i 12 diversi campi ACF che stiamo visualizzando (2 dei quali sono ripetitori). Le basi sono questo codice qui, il pulsante onClickchiama la funzione ajax in un file JS separato e il php per la funzione ajax stessa essenzialmente imposta una matrice di argomenti per la query,$selectedOptiono $_POST['option']come meta_value. Ciò viene alimentato da a new WP_Query( $args );, che viene quindi utilizzato in un loop, il cui output viene restituito a js tramite 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>';
 }

Se lo faccio, produrrò le opzioni assegnate al "post", ciò di cui ho bisogno è mostrare tutte le opzioni in una "pagina" come un elenco completo di opzioni.
Bob,

Sono curioso di sapere perché hai bisogno dell'elenco delle opzioni del backend che appare sul frontend. Vuoi solo visualizzare l'elenco delle opzioni con gli elementi selezionati nell'amministratore selezionato? Se stai provando a utilizzare questo come parte di un modulo (consentendo la modifica da parte dell'utente dei dati selezionati), questo non è il plug-in o il metodo giusto per farlo. Tuttavia, se desideri che l'elenco delle opzioni venga utilizzato come pre-filtro per riscrivere la query, potrei avere la cosa giusta per te. Modificherò il mio post sopra con quel codice qui a breve.
SickHippie il

Ciao im Bob con un altro acc, ho bisogno delle opzioni del backend per creare una sorta di "menu" con loro. Penso che il tuo codice recuperi i post e le opzioni loro assegnate. Ho solo bisogno dell'elenco di opzioni come quello che appare sul backend quando crei un post. Continuerò a lavorare con il tuo codice per vedere se riesco a capire qualcosa. Grazie @SickHippie
Dunning-Kruger

No, estrae l'elenco delle opzioni che sono state selezionate da quella casella di controllo - vale a dire, dice "ecco la casella di controllo, ci sono post a cui sono stati assegnati valori 'opzione 1', 'opzione 2', 'opzione 4' e così via. Estrae letteralmente l'elenco dei meta_valori basato su quella meta_key. Ne avevo bisogno per un elenco dinamico, ma se hai creato una bozza di post verranno selezionate tutte le caselle di controllo che estrarranno tutte le opzioni in un array per te. Sto usando il foreachloop-through. Le funzioni successive portano l'elenco dei post tramite Ajax, ma ho lasciato fuori quel pezzo.
SickHippie
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.