Tampilkan semua nilai kustom bidang yang dibuat dengan ACF pada halaman

9

Saya menggunakan Bidang Kustom Tingkat Lanjut / ACF untuk membuat bidang khusus. Salah satunya adalah daftar kotak centang yang menampilkan beberapa opsi (option1, option2, option3 ...) .

Sekarang saya ingin menampilkan semua opsi bidang ini pada halaman terpisah di frontend seperti:

Opsi:
- opsi 1
- opsi 2
- opsi 3
- ...

Bagaimana saya bisa mengambil semua opsi dengan kunci dari ACF?

Bob
sumber
Harap sedikit lebih jelas tentang apa yang sebenarnya ingin Anda capai. ACF dibangun untuk menunjukkan output dari bidang kustom di frontend, bukan untuk memungkinkan input frontend.
SickHippie

Jawaban:

16

Fungsi get_field_objectACF dapat digunakan untuk mendapatkan info dan opsi untuk bidang tertentu.

Pertama, Anda perlu kunci bidang dari bidang spesifik yang ingin Anda hasilkan. Saat mengedit grup bidang, klik pada tab opsi layar di bagian atas halaman. Anda akan melihat opsi untuk beralih tampilan kunci bidang (tersembunyi secara default untuk menghemat ruang):

Kunci Bidang

Setelah Anda memiliki kunci, Anda bisa memuat objek bidang dan menampilkan nilainya:

$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>';
}
Milo
sumber
Alangkah baiknya jika kita bisa merujuk nama, semudah menggunakan kuncinya. dengan cara ini jika memiliki ini dalam sebuah plugin dan perlu untuk mengujinya pada contoh lain dari WordPress dengan ACF diaktifkan, Anda tidak perlu memburu kunci dan mengubahnya lagi hanya karena Anda di lingkungan B.
klewis
0

Jika Anda mencoba menampilkan sesuatu jika kotak centang dicentang, gunakan:

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

Jika Anda mencoba untuk hanya menampilkan daftar opsi yang dicentang, gunakan ini:

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

Ini akan memberi Anda array nilai yang dapat Anda kelola dengan foreachdeklarasi. Menggunakan the_field('checkbox')akan memberi Anda string yang dipisahkan koma dari opsi yang dapat Anda bagi juga.

Saya juga menyarankan Anda pergi ke situs ACF dan membaca dokumentasi. Sebagian besar pertanyaan jenis ini akan dijawab di sana dengan detail yang layak, dan pengembang juga aktif di forum dukungannya.

EDIT: Jika Anda ingin daftar pilihan opsi yang tersedia menjadi halaman untuk menghasilkan permintaan dinamis, saya baru saja melakukannya. Ini adalah bagian yang baru saya buat kemarin untuk menarik daftar nilai meta dari kunci bidang khusus yang diberikan (menggunakan ACF). Saya membuatnya cukup generik untuk Anda. Ada sepotong JS lain untuk menangani permintaan ajax, dan sepotong php yang agak berbelit-belit yang menampilkan tulisan yang dihasilkan. Saya tidak bisa benar-benar menulis ulangnya - JS adalah standar WP menghadap ke depan panggilan ajax / respon, dan PHP adalah berantakan pemeriksaan bersyarat untuk 12 bidang ACF yang kami tampilkan (2 di antaranya adalah repeater). Dasar-dasarnya adalah kode ini di sini, tombol onClickmemanggil fungsi ajax dalam file JS yang terpisah, dan php untuk fungsi ajax itu sendiri pada dasarnya mengatur array argumen untuk kueri,$selectedOptionatau $_POST['option']sebagai meta_value. Itu akan diumpankan ke new WP_Query( $args );, yang kemudian digunakan dalam satu lingkaran, output yang akan diumpankan kembali ke js via add_action('wp_ajax_the_ajax_hook', 'fetch_option_list');dan 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>';
 }
SickHippie
sumber
Mm, jika saya melakukan ini, saya akan menampilkan opsi yang ditetapkan untuk "posting", yang saya butuhkan adalah menampilkan semua opsi di "halaman" sebagai daftar opsi yang lengkap.
Bob
Saya ingin tahu mengapa Anda perlu menampilkan daftar opsi backend di frontend. Apakah Anda ingin hanya menampilkan daftar opsi dengan item yang dipilih di admin yang dipilih? Jika Anda mencoba menggunakan ini sebagai bagian dari formulir (memungkinkan pengguna mengubah data yang diperiksa), ini bukan plugin atau metode yang tepat untuk melakukannya. Namun, jika Anda ingin daftar opsi digunakan sebagai pra-filter untuk menulis ulang kueri, saya mungkin hanya memiliki satu hal untuk Anda. Saya akan mengedit posting saya di atas dengan kode itu di sini segera.
SickHippie
Hai im Bob dengan mnrt yang lain, saya perlu opsi backend untuk membuat semacam "menu" dengannya. Saya pikir kode Anda mengambil posting dan opsi yang diberikan padanya. Saya hanya perlu daftar opsi seperti yang muncul di backend ketika Anda membuat posting. Saya akan terus bekerja dengan kode Anda untuk melihat apakah saya dapat menemukan sesuatu. Terima kasih @SickHippie
Dunning-Kruger
Tidak, itu menarik daftar opsi yang telah dipilih dari kotak centang itu - artinya, katanya "inilah kotak centang, ada posting yang telah diberi nilai 'opsi 1', 'opsi 2', 'opsi 4' dan seterusnya. Ini benar-benar hanya menarik daftar meta_value berdasarkan meta_key itu. Saya membutuhkannya untuk daftar dinamis, tetapi jika Anda membuat draf semua kotak centang yang dipilih akan menarik semua opsi dalam array untuk Anda. Saya menggunakan foreachuntuk loop melalui. Fungsi-fungsi selanjutnya membawa daftar posting melalui ajax, tapi saya meninggalkan sedikit itu
SickHippie