WordPress'in varsayılan içerik türleri post (yazı) ve page (sayfa) dır. Custom Post Type (CPT) ile portfolio, ürün, film, kurs gibi özel içerik türleri oluşturulabilir.
İçerikleri sınıflandırmak için kullanılan yapıdır. Varsayılan taxonomy'ler: category ve tag. Custom taxonomy ile kendi sınıflandırma sisteminizi oluşturursunuz — örneğin filmler için tür, yönetmen.
init action hook'una bağlanarak çağrılmalıdır. Tema functions.php'ye değil, plugin içine yazın — tema değişirse içerik türü kaybolur.
<?php
add_action('init', 'furkanbacanli_cpt_kaydet');
function furkanbacanli_cpt_kaydet() {
// ── Custom Post Type: Kurs ──
register_post_type('kurs', [
'labels' => [
'name' => 'Kurslar',
'singular_name' => 'Kurs',
'add_new' => 'Yeni Kurs',
'add_new_item' => 'Yeni Kurs Ekle',
'edit_item' => 'Kursu Düzenle',
'search_items' => 'Kurs Ara',
],
'public' => true,
'has_archive' => true,
'show_in_rest' => true, // Gutenberg desteği
'rewrite' => ['slug' => 'kurslar'],
'menu_icon' => 'dashicons-welcome-learn-more',
'menu_position'=> 5,
'supports' => ['title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'],
'taxonomies' => ['kurs_kategori', 'kurs_seviye'],
]);
// ── Custom Taxonomy: Kurs Kategorisi ──
register_taxonomy('kurs_kategori', 'kurs', [
'labels' => [
'name' => 'Kurs Kategorileri',
'singular_name' => 'Kurs Kategorisi',
'add_new_item' => 'Yeni Kategori Ekle',
],
'hierarchical' => true, // true = kategori gibi, false = etiket gibi
'public' => true,
'show_in_rest' => true,
'rewrite' => ['slug' => 'kurs-kategori'],
]);
// ── Custom Taxonomy: Seviye (hiyerarşisiz) ──
register_taxonomy('kurs_seviye', 'kurs', [
'labels' => [
'name' => 'Seviyeler',
'singular_name' => 'Seviye',
],
'hierarchical' => false,
'public' => true,
'show_in_rest' => true,
'rewrite' => ['slug' => 'seviye'],
]);
}
// ── CPT Sorgulama ──
function furkanbacanli_kurslar_getir($adet = 10, $kategori = '') {
$args = [
'post_type' => 'kurs',
'posts_per_page' => $adet,
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
];
if ($kategori) {
$args['tax_query'] = [[
'taxonomy' => 'kurs_kategori',
'field' => 'slug',
'terms' => $kategori,
]];
}
$query = new WP_Query($args);
$kurslar = [];
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$kurslar[] = [
'id' => get_the_ID(),
'baslik' => get_the_title(),
'link' => get_permalink(),
'ozet' => get_the_excerpt(),
'resim' => get_the_post_thumbnail_url(null, 'medium'),
'tarih' => get_the_date('d.m.Y'),
];
}
wp_reset_postdata();
}
return $kurslar;
}