Meja kerja dengan laptop menampilkan editor kode PHP dan catatan sketsa struktur website

Cara Membuat Custom Post Type di WordPress Tanpa Plugin

Share this post on:

Klien mengirim daftar proyek yang ingin ditampilkan di website, lengkap dengan nama, tahun, dan jenis pekerjaan. Kalau semua itu dimasukkan ke pos biasa, arsip blog akan bercampur dengan portofolio dan navigasi jadi berantakan. Solusinya adalah custom post type, dan kamu bisa membuatnya langsung dari functions.php tanpa memasang plugin.

Kapan custom post type layak dibuat

WordPress menyediakan pos dan halaman sejak awal. Pos untuk konten yang tersusun berdasarkan waktu, halaman untuk konten statis seperti profil atau kontak. Ketika ada jenis konten yang punya struktur dan kebutuhan tampilan berbeda, di situlah custom post type masuk.

Proyek portofolio, daftar produk, koleksi resep, atau direktori anggota tim biasanya tidak cocok disimpan sebagai pos. Masing-masing butuh taksonomi sendiri, arsip sendiri, dan template tampilan sendiri. Mencampurnya ke pos membuat pengelolaan konten makin rumit seiring bertambahnya jumlah entri.

Sebelum menulis kode, tetapkan dulu nama jenis kontennya dalam bahasa Inggris dan huruf kecil, misalnya portfolio atau produk. Nama ini akan dipakai di seluruh kode dan sebaiknya tidak diubah setelah konten terisi.

Menulis kode register_post_type di functions.php

Semua pengaturan custom post type dikirim ke fungsi register_post_type(). Fungsi ini harus dijalankan pada hook init supaya WordPress sudah siap mendaftarkan jenis konten baru.

Buka file functions.php di folder tema aktif, lalu tambahkan kode berikut di bagian paling bawah.

function webdeki_register_portfolio() {
    $labels = array(
        'name'          => 'Portofolio',
        'singular_name' => 'Proyek',
        'add_new_item'  => 'Tambah Proyek Baru',
        'edit_item'     => 'Edit Proyek',
        'all_items'     => 'Semua Proyek',
    );

    $args = array(
        'labels'        => $labels,
        'public'        => true,
        'has_archive'   => true,
        'menu_icon'     => 'dashicons-portfolio',
        'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
        'rewrite'       => array( 'slug' => 'portofolio' ),
        'show_in_rest'  => true,
    );

    register_post_type( 'portfolio', $args );
}
add_action( 'init', 'webdeki_register_portfolio' );

Nilai public membuat jenis konten ini muncul di admin dan bisa diakses pengunjung. has_archive menghasilkan halaman arsip otomatis di /portofolio/. supports menentukan kolom editor yang tersedia, dan show_in_rest mengaktifkan editor blok serta akses REST API.

Menyesuaikan labels dan ikon menu

Bagian labels menentukan teks yang tampil di dashboard. Ganti nilainya sesuai jenis konten supaya penulis tidak bingung mencari menu. Untuk ikon, WordPress menyediakan kumpulan Dashicons yang bisa dipakai lewat nilai menu_icon, misalnya dashicons-products untuk katalog barang.

Menambahkan taksonomi khusus

Portofolio biasanya perlu dikelompokkan berdasarkan jenis pekerjaan. Buat taksonomi sendiri agar tidak bercampur dengan kategori pos biasa.

function webdeki_register_portfolio_taxonomy() {
    register_taxonomy(
        'jenis_proyek',
        'portfolio',
        array(
            'label'        => 'Jenis Proyek',
            'hierarchical' => true,
            'rewrite'      => array( 'slug' => 'jenis-proyek' ),
            'show_in_rest' => true,
        )
    );
}
add_action( 'init', 'webdeki_register_portfolio_taxonomy' );

Nilai hierarchical yang diset true membuat taksonomi ini berperilaku seperti kategori, punya induk dan anak. Kalau ingin modelnya seperti tag yang bebas, ubah menjadi false.

Menampilkan konten di halaman depan

Setelah jenis konten terdaftar, buat template khusus supaya tampilannya berbeda dari pos. WordPress membaca nama file template dengan urutan tertentu. Untuk arsip, buat archive-portfolio.php. Untuk halaman detail, buat single-portfolio.php.

Di dalam single-portfolio.php, ambil data dengan loop standar WordPress.

<?php
while ( have_posts() ) : the_post(); ?>
    <article>
        <h1><?php the_title(); ?></h1>
        <div><?php the_post_thumbnail( 'large' ); ?></div>
        <div><?php the_content(); ?></div>
    </article>
<?php endwhile; ?>

Kalau tema tidak punya file ini, WordPress akan memakai single.php atau index.php sebagai cadangan, sehingga tampilan portofolio akan mirip pos biasa.

Menyegarkan permalink setelah kode aktif

Salah satu masalah yang paling sering muncul setelah menambahkan custom post type adalah halaman yang menampilkan error 404. Penyebabnya bukan kode yang salah, melainkan aturan permalink WordPress belum diperbarui.

Buka menu Settings lalu Permalinks, dan cukup tekan tombol Save Changes tanpa mengubah apa pun. WordPress akan menulis ulang aturan rewrite sehingga URL arsip baru bisa dikenali. Cara lain lewat kode:

add_action( 'after_switch_theme', 'flush_rewrite_rules' );

Simpan baris itu hanya saat tema diaktifkan. Jangan memanggil flush_rewrite_rules() pada setiap pemuatan halaman karena prosesnya berat dan memperlambat situs.

Langkah pengujian di dashboard

Setelah semua kode tersimpan, lakukan pemeriksaan berurutan sebelum menyerahkan pekerjaan ke klien.

  • Pastikan menu Portofolio muncul di sidebar dashboard dengan ikon yang benar.
  • Buat satu entri contoh, isi judul, konten, dan gambar unggulan, lalu terbitkan.
  • Buka URL detail entri dan periksa apakah template khusus dipakai.
  • Akses halaman arsip di /portofolio/ dan cek daftar entri tampil rapi.
  • Uji jenis proyek dengan menambahkan satu istilah dan mengaitkannya ke entri.
  • Matikan plugin cache sementara untuk memastikan tidak ada versi lama yang tersimpan.

Jika salah satu langkah gagal, periksa kembali penulisan nama jenis konten. Kesalahan ketik pada argumen register_post_type() atau ketidakcocokan nama di template biasanya jadi biang keladi.

Kapan sebaiknya memakai plugin

Pendekatan manual cocok saat kebutuhan jenis konten sudah jelas dan tidak berubah-ubah. Kode yang ditulis sendiri lebih ringan karena hanya memuat fitur yang dipakai. Namun kalau kamu mengelola banyak situs klien dengan kebutuhan berbeda-beda, plugin seperti Custom Post Type UI atau ACF bisa menghemat waktu karena pengaturannya dilakukan lewat antarmuka.

Perlu diperhatikan bahwa jenis konten yang dibuat lewat plugin tetap tersimpan di basis data. Kalau plugin dinonaktifkan, definisinya hilang dan konten tidak bisa diakses sampai plugin diaktifkan kembali. Menyimpannya di functions.php atau plugin khusus milik sendiri menghindari risiko itu.

Ringkasan

Custom post type dibuat dengan memanggil register_post_type() pada hook init, ditambah taksonomi sendiri bila perlu pengelompokan. Setelah kode aktif, segarkan permalink dan uji lewat dashboard. Simpan definisi di tema anak atau plugin buatan sendiri supaya tidak hilang saat tema diperbarui.

Pertanyaan yang Sering Diajukan

Apakah custom post type hilang kalau tema diganti?

Ya, kalau kodenya diletakkan di functions.php tema induk. Kontennya tetap ada di basis data, tetapi definisinya perlu didaftarkan ulang. Pindahkan kode ke tema anak atau plugin khusus agar tetap aktif setelah pergantian tema.

Mengapa halaman arsip menampilkan error 404?

Hampir selalu karena aturan permalink belum diperbarui. Buka Settings lalu Permalinks dan simpan ulang pengaturannya. Pastikan juga argumen has_archive diisi true dan nama slug tidak bentrok dengan halaman atau kategori yang sudah ada.

Bisakah satu situs punya beberapa custom post type?

Bisa. Panggil register_post_type() sekali untuk setiap jenis konten, semuanya di dalam fungsi yang sama atau fungsi terpisah pada hook init. Jaga agar nama tiap jenis konten unik dan tidak melebihi 20 karakter.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *