Ikhtisar Chapter 6: Events & Custom Post Types
Apa yang Dipelajari?
Cara membuat Custom Post Type (CPT) untuk Events — dari pendaftaran, tampilan di frontend, custom fields (tanggal), sorting, filtering event yang sudah lewat, hingga pagination.
Poin Utama
1. Apa Itu Custom Post Type?
WordPress bawaan hanya punya 2 jenis konten: post (blog) dan page (halaman statis). Dengan CPT, kita bisa bikin jenis konten baru sesuai kebutuhan — misalnya Events, Programs, Professors, dll.
Pendaftaran dilakukan di file mu-plugins/university-post-types.php (bukan di functions.php) agar tidak hilang saat ganti tema:
register_post_type('event', array(
'public' => true,
'show_in_rest' => true, // aktifkan Block Editor
'has_archive' => true,
'rewrite' => array('slug' => 'events'),
'supports' => array('title', 'editor', 'excerpt'),
'labels' => array('name' => 'Events', ...),
'menu_icon' => 'dashicons-calendar'
));| Parameter | Fungsi |
|---|---|
show_in_rest | Aktifkan Block Editor modern |
has_archive | Buat halaman arsip di /events |
rewrite | Atur slug URL |
supports | Fitur yang tersedia (title, editor, excerpt) |
Setelah daftar CPT baru, selalu ke Settings → Permalinks → Save agar URL berfungsi.
2. Custom Fields dengan ACF (Advanced Custom Fields)
Plugin ACF memungkinkan penambahan field ekstra — contoh: Event Date dengan date picker.
| Fungsi ACF | Kegunaan |
|---|---|
get_field('event_date') | Ambil nilai field (return, perlu echo) |
the_field('event_date') | Tampilkan langsung ke halaman |
Untuk format tanggal, gunakan PHP DateTime:
$eventDate = new DateTime(get_field('event_date'));
echo $eventDate->format('M'); // "Jul"
echo $eventDate->format('d'); // "20"3. Template Files untuk CPT
WordPress otomatis mencari file dengan pola nama tertentu:
| File | Fungsi |
|---|---|
single-event.php | Halaman satu event |
archive-event.php | Halaman daftar semua events |
page-past-events.php | Halaman khusus "Past Events" (berdasarkan slug) |
4. Sorting & Filtering Events
Urutkan berdasarkan tanggal event (bukan tanggal publish):
'meta_key' => 'event_date',
'orderby' => 'meta_value_num',
'order' => 'ASC'Sembunyikan event yang sudah lewat dengan meta_query:
'meta_query' => array(array(
'key' => 'event_date',
'compare' => '>=', // >= hari ini = upcoming
'value' => date('Ymd'),
'type' => 'numeric'
))Ganti '>=' jadi '<' untuk menampilkan event yang sudah lewat.
5. Dua Cara Mengatur Query
| Cara | Kapan Dipakai | Contoh |
|---|---|---|
new WP_Query() | WordPress BELUM otomatis query konten yang kita mau | Events di homepage |
pre_get_posts | WordPress SUDAH query tapi perlu dimodifikasi | Archive events /events |
pre_get_posts lebih efisien karena pagination otomatis berfungsi:
add_action('pre_get_posts', function($query) {
if (!is_admin() AND is_post_type_archive('event') AND $query->is_main_query()) {
$query->set('meta_key', 'event_date');
// ... tambah filter & sorting
}
});6. Pagination di Custom Query
Untuk halaman Past Events yang pakai new WP_Query, pagination perlu 3 hal:
- Parameter
paged:'paged' => get_query_var('paged', 1) - Loop pakai object:
$pastEvents->have_posts() - Total halaman:
echo paginate_links(array('total' => $pastEvents->max_num_pages))
Satu Kalimat
Chapter ini memperkenalkan Custom Post Types — fitur paling powerful di WordPress yang memungkinkan kita membuat jenis konten baru (Events), dilengkapi custom fields, sorting, filtering, dan template khusus.