ana_sayfa / wordpress-plugin / custom-post-type-ve-taxonomy
🔵 WordPress Plugin 📊 Başlangıç ⏱ 20 dk 📋 1 Kod Örneği

Custom Post Type ve Taxonomy

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.

Taxonomy Nedir?

İç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.

register_post_type Ne Zaman Çağrılır?

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 CPT ve Taxonomy Kayıt
<?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;
}
← Önceki Ders
WordPress Nedir? Kurulum
Sonraki Ders →
Shortcode ve Widget Geliştirme