Ikhtisar Chapter 7: Programs Post Type & Relationships
Apa yang Dipelajari?
Cara membuat Custom Post Type Program dan membangun relasi dua arah antara Events dan Programs menggunakan ACF Relationship field.
Poin Utama
1. Mendaftarkan CPT Program
Sama seperti Events, Program didaftarkan di mu-plugins/university-post-types.php:
register_post_type('program', array(
'show_in_rest' => true,
'supports' => array('title', 'editor'),
'has_archive' => true,
'rewrite' => array('slug' => 'programs'),
'public' => true,
'labels' => array('name' => 'Programs', ...),
'menu_icon' => 'dashicons-awards'
));Archive diurutkan A-Z dan menampilkan semua program sekaligus (posts_per_page => -1) via pre_get_posts.
2. Relasi dengan ACF Relationship Field
Di admin ACF, buat field Related Program(s) bertipe Relationship → pasang di post type Event. Saat edit event, kita bisa pilih program mana yang terkait.
3. Menampilkan Relasi — Dua Arah
| Arah | Cara | File |
|---|---|---|
| Event → Program | get_field('related_programs') + foreach | single-event.php |
| Program → Event | WP_Query + meta_query LIKE | single-program.php |
Event → Program (sederhana — field ada di event):
$relatedPrograms = get_field('related_programs');
foreach ($relatedPrograms as $program) {
echo get_the_title($program);
}Program → Event (balik arah — perlu custom query):
'meta_query' => array(array(
'key' => 'related_programs',
'compare' => 'LIKE',
'value' => '"' . get_the_ID() . '"' // tanda kutip penting!
))Tanda kutip di sekitar ID (
"12") mencegah false match — tanpa kutip, ID12bisa cocok dengan120,1200, dll.
4. Conditional Display
Selalu bungkus tampilan relasi dengan if:
- Cek
if ($relatedPrograms)sebelum foreach — hindari error jika kosong - Cek
if ($query->have_posts())sebelum tampilkan heading — hindari judul tanpa isi
5. Template Files
| File | Fungsi |
|---|---|
single-program.php | Halaman satu program + upcoming events terkait |
archive-program.php | Daftar semua programs (A-Z, satu halaman) |
Satu Kalimat
Chapter ini mengajarkan cara menghubungkan dua jenis konten berbeda (Events dan Programs) sehingga pengunjung bisa melihat relasi antar konten secara otomatis dari kedua sisi.