Skip to content

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:

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 ​

ArahCaraFile
Event → Programget_field('related_programs') + foreachsingle-event.php
Program → EventWP_Query + meta_query LIKEsingle-program.php

Event → Program (sederhana — field ada di event):

php
$relatedPrograms = get_field('related_programs');
foreach ($relatedPrograms as $program) {
    echo get_the_title($program);
}

Program → Event (balik arah — perlu custom query):

php
'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, ID 12 bisa cocok dengan 120, 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 ​

FileFungsi
single-program.phpHalaman satu program + upcoming events terkait
archive-program.phpDaftar 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.