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.