Custom Post Type WordPress memungkinkan Anda membuat jenis konten khusus di luar struktur konten editorial biasa. Dengan fitur ini, website WordPress dapat memiliki ruang khusus untuk mengelola konten seperti properti, produk, portofolio, acara, atau testimoni.
Misalnya, website properti tidak harus memasukkan semua data rumah dan apartemen ke dalam Posts. Dengan Custom Post Type (CPT), data properti dapat dipisahkan dari artikel blog sehingga pengelolaannya lebih rapi dan struktur website lebih mudah dikembangkan.
Pada tutorial ini, kita akan membuat katalog properti menggunakan CPT properti, taxonomy lokasi, dan taxonomy tipe_properti. Seluruh proses dilakukan tanpa plugin, menggunakan fungsi bawaan WordPress dan sedikit kode PHP.
Sebelum masuk ke tahap pembuatan, penting memahami terlebih dahulu konsep dasar WordPress agar struktur CPT yang dibuat tidak keliru. Jika Anda masih baru dengan WordPress, Anda dapat membaca panduan apa itu WordPress sebagai dasar.
Custom Post Type WordPress adalah fitur untuk membuat tipe konten khusus sesuai kebutuhan website. CPT membuat konten tertentu memiliki struktur pengelolaan sendiri, sehingga tidak semuanya harus bercampur dengan artikel pada Posts.
Contohnya, sebuah website properti dapat memiliki menu Properti di dashboard WordPress. Setiap properti kemudian dapat memiliki judul, deskripsi, gambar utama, custom fields, lokasi, dan tipe properti.
Pemisahan ini berguna ketika website mulai memiliki banyak jenis informasi. Artikel berita tetap dikelola sebagai Posts, sedangkan data properti dikelola melalui CPT khusus. Hasilnya, struktur konten menjadi lebih terorganisasi dan lebih mudah dikembangkan sesuai kebutuhan.
Custom Post Type WordPress mulai terasa manfaatnya ketika sebuah website memiliki jenis konten yang berbeda dan membutuhkan cara pengelolaan yang lebih spesifik. Jika semua informasi dimasukkan ke Posts, dashboard dapat menjadi sulit dikelola ketika jumlah konten semakin banyak.
Misalnya, sebuah website bisnis memiliki artikel blog, katalog produk, portofolio, dan testimoni pelanggan. Keempatnya memiliki karakteristik berbeda, sehingga memisahkannya ke dalam tipe konten masing-masing dapat membuat struktur website lebih jelas.
Website toko atau distributor dapat menggunakan CPT untuk menyimpan data produk secara terpisah dari artikel. Informasi seperti spesifikasi, harga, merek, dan kategori produk dapat dikelola dengan struktur yang lebih sesuai.
Website agen properti dapat menggunakan CPT untuk mengelola rumah, apartemen, tanah, atau bangunan komersial. Setiap properti dapat memiliki informasi seperti lokasi, tipe, luas tanah, luas bangunan, dan fasilitas.
Website agensi, fotografer, desainer, atau freelancer dapat menggunakan CPT untuk memisahkan proyek atau hasil pekerjaan dari artikel blog. Setiap proyek dapat memiliki gambar, deskripsi, klien, dan informasi pendukung lainnya.
Testimoni juga dapat dibuat sebagai tipe konten tersendiri ketika jumlahnya cukup banyak. Data seperti nama pelanggan, isi testimoni, perusahaan, dan foto dapat dikelola secara lebih terstruktur.
Intinya, Custom Post Type WordPress bukan sekadar cara menambah menu baru di dashboard. CPT berguna ketika sebuah jenis informasi memiliki struktur, atribut, dan kebutuhan pengelolaan yang berbeda dari konten editorial biasa.
Sebelum membuat Custom Post Type WordPress, tentukan terlebih dahulu struktur data yang akan digunakan. Perencanaan ini penting agar CPT tidak hanya berfungsi sebagai menu baru di dashboard, tetapi benar-benar sesuai dengan kebutuhan katalog properti.
Dalam contoh ini, kita akan membuat satu CPT bernama properti. Setiap data yang dimasukkan ke dalamnya akan mewakili satu properti yang ingin ditampilkan di website.
Struktur dasarnya dapat dibuat seperti berikut:
propertiTaxonomy lokasi digunakan untuk mengelompokkan properti berdasarkan wilayah. Karena lokasi biasanya memiliki struktur bertingkat, taxonomy ini akan dibuat secara hierarkis.
Contohnya, struktur lokasi dapat dibuat seperti:
Struktur hierarkis seperti ini membuat satu wilayah dapat memiliki wilayah turunan. Pengelompokan tersebut akan berguna ketika pengunjung ingin mencari properti berdasarkan area tertentu.
Berbeda dengan lokasi, tipe_properti akan digunakan untuk mengelompokkan karakteristik properti, misalnya rumah, apartemen, tanah, atau ruko.
Taxonomy ini dibuat non-hierarkis karena setiap tipe dapat berdiri sendiri dan tidak membutuhkan hubungan induk-anak seperti struktur wilayah.
Dengan struktur tersebut, satu katalog dapat memiliki kombinasi seperti Rumah di Jakarta Selatan, Apartemen di Bandung Utara, atau tipe properti lain sesuai kebutuhan website.
Setelah struktur data ditentukan, tahap berikutnya adalah mendaftarkan CPT properti ke WordPress menggunakan fungsi register_post_type().
Setelah struktur katalog ditentukan, sekarang kita bisa membuat Custom Post Type WordPress untuk menampung data properti. Pada tahap ini, kita menggunakan fungsi bawaan WordPress bernama register_post_type().
Untuk menjaga agar CPT tidak bergantung pada tema yang digunakan, kode sebaiknya ditempatkan di custom plugin. Dengan cara ini, data dan fungsi CPT tetap tersedia meskipun Anda mengganti tema WordPress di kemudian hari.
Buat file PHP untuk plugin, kemudian masukkan kode berikut:
<?php
function beritanda_register_properti_cpt() {
$labels = array(
'name' => 'Properti',
'singular_name' => 'Properti',
'menu_name' => 'Properti',
'add_new_item' => 'Tambah Properti Baru',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-admin-home',
'supports' => array(
'title',
'editor',
'thumbnail',
'custom-fields',
),
'rewrite' => array(
'slug' => 'properti',
),
'show_in_rest' => true,
);
register_post_type( 'bt_properti', $args );
}
add_action( 'init', 'beritanda_register_properti_cpt' );
Pada kode tersebut, bt_properti digunakan sebagai identifier internal untuk post type, sedangkan properti digunakan sebagai slug URL. Identifier internal sebaiknya memiliki nama yang unik dan tidak menggunakan prefix wp_.
Beberapa parameter utama dalam kode tersebut menentukan bagaimana CPT bekerja di WordPress.
public => true membuat CPT dapat digunakan dan ditampilkan secara publik.has_archive => true membuat halaman arsip untuk daftar properti.supports menentukan fitur editor yang tersedia, seperti judul, editor, thumbnail, dan custom fields.rewrite menentukan slug URL untuk CPT.show_in_rest => true membuat CPT tersedia melalui WordPress REST API dan mendukung editor blok.Setelah plugin diaktifkan, menu Properti akan muncul di dashboard WordPress. Namun, struktur katalog belum sepenuhnya selesai karena kita masih perlu menambahkan taxonomy untuk mengelompokkan properti berdasarkan lokasi dan tipe.
Setelah Custom Post Type WordPress untuk properti berhasil dibuat, langkah berikutnya adalah menambahkan taxonomy lokasi. Taxonomy ini berfungsi mengelompokkan properti berdasarkan wilayah sehingga data katalog lebih mudah diatur dan difilter.
Untuk lokasi, kita menggunakan taxonomy hierarkis. Artinya, sebuah lokasi dapat memiliki lokasi turunan. Struktur seperti ini cocok untuk wilayah yang memiliki hubungan induk dan anak, misalnya provinsi, kota, hingga kecamatan.
Tambahkan kode berikut pada plugin yang sama:
function beritanda_register_lokasi_taxonomy() {
register_taxonomy(
'lokasi',
'bt_properti',
array(
'label' => 'Lokasi',
'hierarchical' => true,
'show_in_rest' => true,
'rewrite' => array(
'slug' => 'lokasi',
),
)
);
}
add_action( 'init', 'beritanda_register_lokasi_taxonomy' );
Parameter hierarchical => true memungkinkan Anda membuat hubungan induk dan turunan pada taxonomy. Dalam katalog properti, struktur ini dapat digunakan untuk mengelompokkan wilayah secara lebih teratur.
Contohnya, Anda dapat membuat struktur seperti berikut:
Dengan struktur tersebut, properti dapat dikaitkan dengan lokasi yang lebih spesifik tanpa kehilangan hubungan dengan wilayah induknya.
Parameter show_in_rest => true juga membuat taxonomy tersedia pada WordPress REST API dan editor blok. Sementara itu, rewrite menentukan slug yang digunakan untuk URL taxonomy lokasi.
Setelah taxonomy lokasi selesai dibuat, kita dapat melanjutkan dengan taxonomy kedua, yaitu tipe_properti. Berbeda dari lokasi, taxonomy ini akan dibuat non-hierarkis.
Taxonomy berikutnya yang perlu dibuat adalah tipe_properti. Jika taxonomy lokasi digunakan untuk menyusun wilayah secara bertingkat, taxonomy tipe properti digunakan untuk mengelompokkan jenis properti seperti rumah, apartemen, tanah, atau ruko.
Pada contoh ini, taxonomy tipe properti dibuat non-hierarkis. Artinya, setiap istilah dapat berdiri sendiri dan tidak memiliki hubungan induk-anak.
Tambahkan kode berikut pada plugin yang sama:
function beritanda_register_tipe_properti_taxonomy() {
register_taxonomy(
'tipe_properti',
'bt_properti',
array(
'label' => 'Tipe Properti',
'hierarchical' => false,
'show_in_rest' => true,
'rewrite' => array(
'slug' => 'tipe',
),
)
);
}
add_action( 'init', 'beritanda_register_tipe_properti_taxonomy' );
Berbeda dengan wilayah, tipe properti biasanya tidak membutuhkan struktur induk dan turunan. Anda cukup membuat istilah seperti:
Parameter hierarchical => false membuat taxonomy tersebut bekerja seperti sistem tag. Setiap istilah dapat digunakan untuk mengelompokkan properti tanpa harus menentukan istilah induknya.
Dengan dua taxonomy ini, struktur katalog menjadi lebih fleksibel. Sebuah properti dapat memiliki lokasi tertentu sekaligus tipe tertentu, misalnya Rumah di Jakarta Selatan.
Parameter show_in_rest => true tetap digunakan agar taxonomy dapat bekerja dengan editor blok dan WordPress REST API. Setelah CPT dan kedua taxonomy selesai didaftarkan, tahap berikutnya adalah menyiapkan tampilan daftar properti pada halaman arsip.
Setelah Custom Post Type WordPress dan taxonomy selesai dibuat, kita perlu menyiapkan halaman yang menampilkan daftar seluruh properti. WordPress dapat menggunakan template khusus bernama archive-properti.php untuk kebutuhan tersebut.
File archive-properti.php digunakan untuk menampilkan halaman arsip dari CPT yang menggunakan slug properti. Template ini memungkinkan tampilan katalog dibuat berbeda dari halaman arsip artikel biasa.
Buat file bernama archive-properti.php pada folder tema yang digunakan, kemudian gunakan contoh sederhana berikut:
<?php get_header(); ?>
<main id="primary" class="site-main">
<header class="page-header">
<h1><?php post_type_archive_title(); ?></h1>
</header>
<?php if ( have_posts() ) : ?>
<div class="daftar-properti">
<?php while ( have_posts() ) : the_post(); ?>
<article class="item-properti">
<?php if ( has_post_thumbnail() ) : ?>
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail( 'medium' ); ?>
</a>
<?php endif; ?>
<h2>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</h2>
<?php the_excerpt(); ?>
</article>
<?php endwhile; ?>
</div>
<?php the_posts_pagination(); ?>
<?php else : ?>
<p>Belum ada properti yang tersedia.</p>
<?php endif; ?>
</main>
<?php get_footer(); ?>
Template tersebut memanfaatkan WordPress Loop untuk mengambil dan menampilkan daftar properti yang tersedia. Judul, thumbnail, permalink, dan ringkasan setiap properti kemudian ditampilkan dalam struktur HTML yang dapat disesuaikan dengan desain website.
Fungsi post_type_archive_title() mengambil nama arsip dari post type, sedangkan the_posts_pagination() menyediakan navigasi ketika jumlah properti melebihi satu halaman.
Jika CPT didaftarkan dengan has_archive => true, WordPress dapat menyediakan halaman arsip untuk CPT tersebut. Template archive-properti.php kemudian digunakan untuk mengatur bagaimana halaman arsip tersebut ditampilkan.
Dengan pendekatan ini, katalog properti memiliki halaman daftar tersendiri dan tidak harus bercampur dengan arsip Posts. Setelah halaman arsip selesai, kita dapat membuat template untuk menampilkan detail satu properti.
Selain halaman arsip, Custom Post Type WordPress juga dapat memiliki template khusus untuk menampilkan detail setiap properti. WordPress menggunakan file single-properti.php untuk mengatur tampilan satu konten dari CPT properti.
Buat file single-properti.php pada folder tema yang digunakan. Contoh sederhananya seperti berikut:
<?php get_header(); ?>
<main id="primary" class="site-main">
<?php while ( have_posts() ) : the_post(); ?>
<article id="post-<?php the_ID(); ?>" class="single-properti">
<header class="entry-header">
<?php the_title( '<h1>', '</h1>' ); ?>
</header>
<?php if ( has_post_thumbnail() ) : ?>
<div class="entry-thumbnail">
<?php the_post_thumbnail( 'large' ); ?>
</div>
<?php endif; ?>
<div class="entry-content">
<?php the_content(); ?>
</div>
</article>
<?php endwhile; ?>
</main>
<?php get_footer(); ?>
Template tersebut masih merupakan versi dasar. Anda dapat mengembangkannya untuk menampilkan informasi khusus seperti harga, luas tanah, luas bangunan, jumlah kamar, fasilitas, dan lokasi.
Jika informasi tersebut disimpan menggunakan custom fields, nilainya dapat dipanggil ke dalam template sesuai dengan sistem custom field yang digunakan. Dengan begitu, halaman detail tidak hanya berisi judul dan deskripsi, tetapi juga dapat berfungsi sebagai halaman katalog yang lebih lengkap.
Hal penting lainnya adalah memastikan struktur HTML tetap semantik. Gunakan satu h1 untuk judul utama properti, kemudian gunakan heading seperti h2 dan h3 untuk membagi informasi ke dalam beberapa bagian.
Template single-properti.php juga dapat dikembangkan dengan breadcrumb, galeri gambar, tombol kontak, peta lokasi, atau elemen lain sesuai kebutuhan website. Namun, fitur tersebut sebaiknya ditambahkan setelah struktur dasar CPT dan taxonomy berjalan dengan baik.
Setelah halaman detail tersedia, langkah berikutnya adalah menggunakan taxonomy untuk membuat filter properti berdasarkan lokasi dan tipe.
Salah satu manfaat utama Custom Post Type WordPress adalah kemampuannya mengelola konten dengan taxonomy yang dapat digunakan untuk penyaringan. Pada katalog properti, kita dapat menampilkan properti berdasarkan lokasi, tipe properti, atau kombinasi keduanya.
WordPress menyediakan WP_Query dan parameter tax_query untuk mengambil konten berdasarkan taxonomy. Contohnya, jika ingin menampilkan properti yang berada di Jakarta Selatan, gunakan kode berikut:
<?php
$args = array(
'post_type' => 'bt_properti',
'tax_query' => array(
array(
'taxonomy' => 'lokasi',
'field' => 'slug',
'terms' => 'jakarta-selatan',
),
),
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
echo '<h2>' . esc_html( get_the_title() ) . '</h2>';
}
wp_reset_postdata();
}
Pada contoh tersebut, post_type menentukan bahwa query hanya mengambil konten dari CPT properti. Sementara itu, tax_query membatasi hasil berdasarkan taxonomy lokasi dengan slug jakarta-selatan.
Filter dapat dibuat lebih spesifik dengan menggunakan lebih dari satu taxonomy. Misalnya, kita ingin mencari properti bertipe rumah yang berada di Jakarta Selatan.
$args = array(
'post_type' => 'bt_properti',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'lokasi',
'field' => 'slug',
'terms' => 'jakarta-selatan',
),
array(
'taxonomy' => 'tipe_properti',
'field' => 'slug',
'terms' => 'rumah',
),
),
);
Parameter relation => 'AND' membuat kedua kondisi tersebut harus terpenuhi. Hasil query kemudian hanya berisi properti yang memiliki lokasi Jakarta Selatan sekaligus tipe Rumah.
Dengan pendekatan ini, katalog dapat dikembangkan menjadi sistem pencarian yang lebih terstruktur. Anda juga dapat menambahkan parameter query lain sesuai kebutuhan, misalnya jumlah hasil per halaman, urutan berdasarkan tanggal, atau pagination.
Setelah filter taxonomy berjalan, kita dapat melanjutkan dengan custom fields untuk menyimpan informasi khusus seperti harga, luas tanah, dan luas bangunan.
Setelah taxonomy digunakan untuk mengelompokkan properti, langkah berikutnya adalah menambahkan informasi yang lebih spesifik melalui custom fields. Bagian ini membuat Custom Post Type WordPress lebih fleksibel karena setiap properti dapat memiliki atribut tambahan di luar judul dan isi artikel.
Untuk katalog properti, beberapa informasi yang dapat disimpan sebagai custom fields antara lain:
Jika menggunakan field bawaan WordPress, Anda dapat mengaktifkan dukungan custom-fields melalui parameter supports pada CPT. Parameter tersebut sudah kita masukkan ketika mendaftarkan post type bt_properti.
'supports' => array(
'title',
'editor',
'thumbnail',
'custom-fields',
),
Dengan dukungan tersebut, WordPress dapat menyimpan pasangan nama dan nilai melalui custom fields. Namun, untuk katalog yang memiliki banyak atribut, pengelolaan field secara manual dapat menjadi kurang praktis.
Custom fields cocok digunakan untuk data yang memiliki nilai spesifik pada setiap properti. Misalnya, satu properti memiliki luas tanah 120 meter persegi, sedangkan properti lainnya memiliki luas tanah 200 meter persegi.
Berbeda dengan taxonomy, data seperti luas tanah dan harga bukanlah kategori untuk mengelompokkan konten. Data tersebut merupakan atribut yang melekat pada masing-masing properti.
Pemisahan antara Post Type, Taxonomy, dan Custom Fields membuat struktur katalog lebih terorganisasi. CPT menentukan jenis konten, taxonomy mengelompokkan konten, sedangkan custom fields menyimpan atribut khusus dari setiap konten.
Untuk kebutuhan yang lebih kompleks, custom fields juga dapat dikelola menggunakan plugin khusus. Namun, jika tujuan Anda adalah memahami fondasi Custom Post Type WordPress, fitur bawaan WordPress sudah cukup untuk memulai.
Jika Anda memahami konsep Custom Post Type WordPress tetapi belum terbiasa menulis PHP, CPT tetap dapat dibuat dengan bantuan plugin. Cara ini lebih praktis untuk pengguna yang ingin membangun struktur konten tanpa harus membuat fungsi registrasi secara manual.
Salah satu pendekatan yang umum adalah menggunakan CPT UI untuk mendaftarkan Custom Post Type dan taxonomy. Sementara itu, plugin seperti Meta Box dapat digunakan untuk membuat dan mengelola custom fields yang lebih terstruktur.
CPT UI membantu membuat CPT dan taxonomy melalui antarmuka WordPress. Anda dapat menentukan nama post type, label, slug, dukungan editor, serta berbagai pengaturan lainnya tanpa menulis fungsi register_post_type() secara manual.
Untuk contoh katalog properti, CPT UI dapat digunakan untuk membuat post type properti serta taxonomy seperti lokasi dan tipe_properti.
Setelah CPT dan taxonomy dibuat, Anda dapat menggunakan Meta Box untuk menambahkan field khusus seperti harga, luas tanah, luas bangunan, jumlah kamar, dan fasilitas.
Pendekatan ini memisahkan tiga kebutuhan utama: CPT untuk menentukan jenis konten, taxonomy untuk mengelompokkan konten, dan custom fields untuk menyimpan atribut khusus.
Meski lebih mudah, penggunaan plugin berarti struktur website bergantung pada plugin tersebut. Karena itu, untuk website produksi sebaiknya pilih solusi yang sesuai dengan kebutuhan jangka panjang, jumlah data, kemampuan teknis, dan kebutuhan pemeliharaan.
Jika Anda sedang belajar dasar pengembangan WordPress, memahami cara manual tetap bermanfaat karena Anda akan mengetahui bagaimana CPT dan taxonomy sebenarnya didaftarkan oleh WordPress.
Membuat Custom Post Type WordPress sebenarnya cukup sederhana, tetapi beberapa kesalahan teknis dapat membuat CPT tidak muncul, URL menghasilkan 404, atau editor tidak bekerja sebagaimana mestinya.
Setelah membuat CPT atau taxonomy baru, terkadang halaman arsip maupun URL detail belum dapat diakses. Salah satu penyebabnya adalah aturan permalink WordPress belum diperbarui.
Untuk memperbarui aturan tersebut, buka Settings > Permalinks di dashboard WordPress, kemudian klik Save Changes tanpa perlu mengubah pengaturan apa pun.
Untuk plugin yang mengelola registrasi CPT secara otomatis saat aktivasi, flush_rewrite_rules() dapat digunakan pada proses aktivasi plugin. Namun, fungsi tersebut sebaiknya tidak dijalankan pada setiap request karena dapat membebani proses WordPress.
Kesalahan lain adalah menempatkan kode registrasi CPT langsung di functions.php parent theme. Cara ini membuat fungsi CPT bergantung pada tema yang sedang digunakan.
Jika tema diganti, CPT berpotensi ikut menghilang dari dashboard. Untuk fungsionalitas yang berkaitan dengan struktur konten, custom plugin merupakan pilihan yang lebih tepat karena data dan fungsi tersebut tetap dapat digunakan ketika tema berubah.
Jika CPT dibuat untuk digunakan dengan editor blok, parameter show_in_rest => true perlu diperhatikan. Tanpa parameter tersebut, CPT tidak tersedia melalui WordPress REST API sebagaimana yang diharapkan dan dapat menimbulkan masalah pada penggunaan editor atau integrasi tertentu.
Identifier internal CPT memiliki batasan tertentu dan sebaiknya dibuat singkat, unik, serta menggunakan prefix yang membedakannya dari kode lain. Dalam contoh tutorial ini, kita menggunakan bt_properti sebagai identifier internal, sedangkan properti digunakan sebagai slug URL.
CPT sebaiknya tidak dibuat hanya karena ingin menambah menu baru di dashboard. Tentukan terlebih dahulu data apa yang akan dikelola, bagaimana konten akan dikelompokkan, dan atribut apa yang diperlukan.
Dalam katalog properti, misalnya, lokasi cocok digunakan sebagai taxonomy hierarkis, sedangkan tipe_properti dapat dibuat non-hierarkis. Perencanaan seperti ini akan membuat struktur website lebih mudah dikembangkan ketika jumlah properti semakin banyak.
Jika struktur CPT, taxonomy, dan template sudah berjalan dengan baik, tahap berikutnya adalah melakukan pengujian menyeluruh sebelum website digunakan untuk mengelola data sebenarnya.
Custom Post Type WordPress merupakan solusi untuk membuat struktur konten yang lebih sesuai dengan kebutuhan website. Dengan CPT, jenis konten seperti katalog properti dapat dipisahkan dari artikel blog sehingga pengelolaannya menjadi lebih terorganisasi.
Pada contoh ini, kita membuat CPT bt_properti, taxonomy lokasi yang hierarkis, serta taxonomy tipe_properti yang non-hierarkis. Struktur tersebut kemudian dapat dikembangkan dengan custom fields, template archive-properti.php, template single-properti.php, dan filter menggunakan WP_Query.
Jika ingin memahami cara kerja WordPress secara lebih mendalam, membuat CPT secara manual merupakan latihan yang baik. Namun, untuk kebutuhan praktis, plugin seperti CPT UI dan Meta Box dapat menjadi alternatif ketika Anda ingin membangun struktur konten tanpa menulis kode PHP sendiri.
Yang terpenting, tentukan struktur data sebelum membuat CPT. Pisahkan jenis konten, taxonomy, dan atribut khusus sesuai fungsinya agar website tetap mudah dikelola dan dikembangkan dalam jangka panjang.