Skip to content

Custom Post Types

Apa Itu Post Type?

Di WordPress, semua konten pada dasarnya adalah post dengan label (post type) yang berbeda. Secara default, WordPress hanya menyediakan 2 post type:

Post TypeKeterangan
postPost blog biasa
pageHalaman statis

Sebagai developer, kita bisa membuat custom post type baru sesuai kebutuhan — misalnya: Events, Programs, Professors, Campuses.


Langkah 1: Mendaftarkan Custom Post Type

Buka file functions.php di folder tema kamu, lalu tambahkan kode berikut di bagian bawah:

php
function university_post_types() {
  register_post_type('event', array(
    'public' => true
  ));
}

add_action('init', 'university_post_types');
BagianPenjelasan
add_action('init', ...)Hook ke event init — saat WordPress inisialisasi. Untuk custom post type, harus pakai init (bukan after_setup_theme atau wp_enqueue_scripts)
register_post_type('event', ...)Fungsi WordPress untuk mendaftarkan post type baru bernama event
'public' => trueMembuat post type terlihat di admin dan frontend

Setelah disimpan, akan muncul item baru di sidebar admin (tapi masih berlabel "Posts").


Langkah 2: Menambahkan Labels

Agar sidebar menampilkan nama yang benar:

php
function university_post_types() {
  register_post_type('event', array(
    'public' => true,
    'labels' => array(
      'name' => 'Events',
      'add_new_item' => 'Add New Event',
      'edit_item' => 'Edit Event',
      'all_items' => 'All Events',
      'singular_name' => 'Event'
    )
  ));
}

add_action('init', 'university_post_types');
Parameter LabelFungsi
nameNama yang tampil di sidebar
add_new_itemTeks heading saat membuat post baru
edit_itemTeks heading saat mengedit post
all_itemsTeks di submenu sidebar (hover)
singular_nameNama bentuk tunggal

💡 Untuk daftar lengkap label, Google: register_post_type → buka codex.wordpress.org


Langkah 3: Menambahkan Custom Icon

Gunakan ikon dari WordPress Dashicons (https://developer.wordpress.org/resource/dashicons/):

php
register_post_type('event', array(
  'public' => true,
  'labels' => array(
    'name' => 'Events',
    'add_new_item' => 'Add New Event',
    'edit_item' => 'Edit Event',
    'all_items' => 'All Events',
    'singular_name' => 'Event'
  ),
  'menu_icon' => 'dashicons-calendar'
));

Cari ikon yang sesuai di halaman Dashicons, klik ikon → salin code name-nya (contoh: dashicons-calendar).


Langkah 4: Pindahkan ke Must-Use Plugins

Masalah dengan functions.php

Kode di functions.php terikat pada tema. Jika tema diganti, custom post type hilang dari sidebar dan konten tidak bisa diakses (walau data tetap aman di database).

Solusi: Must-Use Plugins

  1. Buka folder instalasi WordPress: wp-content/
  2. Buat folder baru: mu-plugins
  3. Buat file baru di dalamnya: university-post-types.php
  4. Cut kode dari functions.php dan paste ke file baru
php
<?php

function university_post_types() {
  register_post_type('event', array(
    'public' => true,
    'labels' => array(
      'name' => 'Events',
      'add_new_item' => 'Add New Event',
      'edit_item' => 'Edit Event',
      'all_items' => 'All Events',
      'singular_name' => 'Event'
    ),
    'menu_icon' => 'dashicons-calendar'
  ));
}

add_action('init', 'university_post_types');
FiturPlugin BiasaMust-Use Plugin
Lokasiwp-content/plugins/wp-content/mu-plugins/
Bisa dinonaktifkan?✅ Ya❌ Tidak — selalu aktif
Cocok untukFitur opsionalCustom post types, fitur kritis

⚠️ Penting: Must-use plugins tidak bisa dinonaktifkan. Selama file PHP ada di folder mu-plugins, WordPress akan selalu memuatnya. Ini memastikan pemilik website tidak pernah kehilangan akses ke custom post type mereka.


Struktur File Saat Ini

wp-content/
├── mu-plugins/
│   └── university-post-types.php   ← Kode custom post type
├── plugins/
├── themes/
│   └── developer-developer/
│       ├── functions.php            ← Hapus kode CPT dari sini
│       ├── front-page.php
│       ├── single.php
│       └── ...

Buat Event Contoh

Setelah kode disimpan, buat beberapa event di WordPress admin:

  1. Math Meetup
  2. The Science of Cats
  3. Poetry Day

Masing-masing dengan isi dummy content.