Skip to content

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:

php
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'
));
ParameterFungsi
show_in_restAktifkan Block Editor modern
has_archiveBuat halaman arsip di /events
rewriteAtur slug URL
supportsFitur 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 ACFKegunaan
get_field('event_date')Ambil nilai field (return, perlu echo)
the_field('event_date')Tampilkan langsung ke halaman

Untuk format tanggal, gunakan PHP DateTime:

php
$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:

FileFungsi
single-event.phpHalaman satu event
archive-event.phpHalaman daftar semua events
page-past-events.phpHalaman khusus "Past Events" (berdasarkan slug)

4. Sorting & Filtering Events

Urutkan berdasarkan tanggal event (bukan tanggal publish):

php
'meta_key' => 'event_date',
'orderby'  => 'meta_value_num',
'order'    => 'ASC'

Sembunyikan event yang sudah lewat dengan meta_query:

php
'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

CaraKapan DipakaiContoh
new WP_Query()WordPress BELUM otomatis query konten yang kita mauEvents di homepage
pre_get_postsWordPress SUDAH query tapi perlu dimodifikasiArchive events /events

pre_get_posts lebih efisien karena pagination otomatis berfungsi:

php
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:

  1. Parameter paged: 'paged' => get_query_var('paged', 1)
  2. Loop pakai object: $pastEvents->have_posts()
  3. 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.