WordPress’te Özel Yazı Türleri (CPT) ve Taksonomiler Nasıl Düzenlenir?

    WordPress’i yalnızca blog yazıları yayımlamak için kullandığınızda standart yazı, kategori ve etiket yapısı çoğu zaman yeterli oluyor. Ancak web siteniz büyüdükçe her içeriği aynı gönderi türünde tutmak yönetimi zorlaştırabiliyor.

    İkinci Öğretmen web sitemi geliştirirken ben de benzer bir ihtiyaçla karşılaştım. Sitede blog yazıları, eğitsel oyunlar, videolar, haritalar, sunular ve indirilebilir belgeler bulunuyor. Bunların tamamını standart blog gönderileri olarak yönetmek istemedim. Çünkü içeriklerin kullanım amaçları birbirinden farklıydı.

    Bu nedenle WordPress’in özel gönderi türleri, yani Custom Post Type (CPT) özelliğinden yararlanmaya karar verdim.

    Neden özel gönderi türü kullandım?

    İlk olarak içerikleri üç ana gruba ayırdım:

    • Blog yazıları (post): Bilgilendirici ve rehber niteliğindeki içerikler.
    • Materyaller (materyal): Eğitsel oyunlar, videolar, haritalar, web araçları ve sınıf içi etkinlikler.
    • İndirilebilir belgeler (wpdmpro): Ünite özetleri, çalışma kâğıtları, sunular ve diğer dosyalar.

    wpdmpro gönderi türü WP Download Manager eklentisi tarafından yönetiliyor. materyal gönderi türünü ise kendi içerik yapım için oluşturduğum özel eklenti üzerinden düzenledim. Böylece içeriklerin birbirine karışmasını önlemek için ilk adımı atmış oldum.

    İlk taksonomi düzenim neden yetersiz kaldı?

    Materyal gönderi türünü oluştururken WordPress’in standart post_tag taksonomisini blog yazılarıyla ortak kullanmayı tercih etmiştim. Bu yaklaşımın avantajı, ayrıca etiket sistemi oluşturmaya gerek kalmamasıydı. Aynı etiket farklı gönderi türlerinde kullanılabiliyordu. Ancak materyal arşivini geliştirmeye başlayınca bu yapı üzerinde yeniden düşündüm.

    Çünkü blog yazılarını sınıflandırmak için kullandığım etiketlerle eğitim materyallerini filtrelemek için kullandığım bilgiler aynı amaca hizmet etmiyordu. Örneğin bir blog yazısının etiketi “WordPress” olabilir. Bir materyalin ise “5. Sınıf”, “Allah İnancı” veya “Video” gibi özelliklerle bulunması gerekiyor.

    Bu bilgiler teknik olarak etiket olarak tutulabilir. Ancak kullanıcıya ayrı ayrı filtreler sunmak istediğimde sorun ortaya çıkıyor.

    Etiket ve taksonomi arasındaki fark

    WordPress’te kategori ve etiketler aslında iki ayrı taksonomidir. Özel taksonomi ise bunlara benzer biçimde çalışan, kendi oluşturduğumuz bir sınıflandırma sistemidir. Örneğin eğitim materyalleri için aşağıdaki yapıyı kullanabiliriz:

    TaksonomiÖrnek değer
    DersDin Kültürü ve Ahlak Bilgisi
    Sınıf5. Sınıf
    ÜniteAllah İnancı
    Materyal kategorisiVideo
    Süre5–10 dakika

    Bu yapı sayesinde kullanıcılar bir materyali yalnızca anahtar kelimeyle değil, birden fazla özelliğini seçerek bulabilir. Benim için önemli nokta, bu özellikleri kategori ağacını gereksiz yere büyütmeden yönetebilmekti.

    Ortak etiketleri ayırırken ne olur?

    Daha sonra blog yazılarıyla materyallerin kullandığı post_tag taksonomisini ayırmak istedim.

    Burada aklıma gelen ilk soru şuydu: “Etiketleri ayırırsam mevcut materyallerdeki etiketler silinir mi?”

    WordPress taksonomilerinde bir gönderinin bir terimle ilişkisi veritabanında tutuluyor. Bir gönderi türünün taksonomi bağlantısını kaldırmak, mevcut terimleri otomatik olarak başka bir taksonomiye taşımıyor. Dolayısıyla yalnızca koddan post_tag kaydını çıkarmak yeterli değil. Mevcut etiket ilişkileri korunuyor olsa bile yeni taksonomiye aktarılmadıkları sürece materyal düzenleme ekranında eskisi gibi görünmeyebilirler.

    Bu nedenle doğrudan etiket bağlantısını kaldırmak yerine aşamalı geçiş planlamak gerekiyor.

    Özel materyal etiketi nasıl oluşturulur?

    Örneğin materyaller için materyal-etiket isimli ayrı bir taksonomi tanımlayabiliriz:

    add_action( 'init', function() {
    
        register_taxonomy(
            'materyal-etiket',
            array( 'materyal' ),
            array(
                'label'        => 'Materyal Etiketleri',
                'public'       => true,
                'show_in_rest' => true,
                'hierarchical' => false,
                'rewrite'      => array(
                    'slug' => 'materyal-etiket'
                )
            )
        );
    
    } );

    Bu kod yeni taksonomiyi kaydeder. Mevcut post_tag etiketlerini yeni taksonomiye taşımaz. Kodun, materyal gönderi türünün kayıt işlemiyle uyumlu olması gerekiyor. Özel gönderi türünü kaydederken kullanılan taxonomies ayarı da buna göre düzenlenmeli.

    Mevcut etiketleri nasıl taşımak gerekir?

    Benim değerlendirdiğim güvenli işlem sırası şöyle:

    1. Veritabanının ve site dosyalarının yedeğini almak.
    2. Yeni materyal-etiket taksonomisini oluşturmak.
    3. Mevcut materyallerin post_tag terimlerini listelemek.
    4. Bu terimlere karşılık gelen yeni taksonomi terimlerini oluşturmak.
    5. Materyal gönderilerini yeni terimlerle ilişkilendirmek.
    6. Gönderilerin etiketlerini ve taksonomi arşivlerini kontrol etmek.
    7. Eski post_tag bağlantısını yalnızca materyal türünden kaldırmak.
    8. Kalıcı bağlantıları yeniden kaydederek ilgili sayfaları test etmek.

    Çok sayıda gönderiniz varsa aktarım işlemini WP-CLI veya yalnızca bir defa çalıştırılacak bir PHP taşıma betiğiyle yapabilirsiniz. Burada önemli bir ayrıntı var: Yeni taksonomide aynı isimli bir etiket oluşturmak, eski taksonomideki terimin kimliğini ve mevcut URL’sini otomatik olarak korumaz. Eğer eski etiket arşivleri arama motorlarında dizine eklenmişse URL değişimlerini ve olası yönlendirmeleri ayrıca değerlendirmek gerekir.

    Her özellik ayrı taksonomi olmalı mı?

    Bu aşamada başka bir soruyla karşılaştım: Sınıf, ders, ünite ve süre bilgilerinin tamamını ayrı taksonomiler olarak mı tanımlamalıyım?

    Benim yaklaşımım, yalnızca gerçekten bağımsız şekilde filtrelenecek alanlar için ayrı taksonomi kullanmak.

    Örneğin kullanıcı önce “Din Kültürü”, ardından “5. Sınıf” seçebilecekse bu iki özelliğin ayrı tutulması anlamlı. Ancak her ayrıntı için yeni taksonomi oluşturmak da yönetimi zorlaştırabilir. Bu nedenle bir alanı oluşturmadan önce kendime şu soruyu soruyorum:

    “Ziyaretçi bu bilgiye göre içerik arayacak veya filtreleme yapacak mı?”

    Cevap evetse ayrı taksonomi kullanmak çoğu zaman daha işlevsel oluyor.

    Sonuç

    WordPress’te CPT oluşturmak teknik olarak kolay bir işlem. Asıl önemli olan, özel gönderi türleriyle taksonomilerin birlikte nasıl çalışacağını başlangıçta düşünmek.

    Ben materyal sistemimi geliştirirken yalnızca içerik ekleme ekranına değil, ziyaretçinin bu içerikleri nasıl bulacağına da odaklandım.

    Blog yazılarını, çevrim içi materyalleri ve indirilebilir belgeleri ayrı yönetmek içerik düzenini sadeleştiriyor. Taksonomilerin doğru ayrılması ise daha sonra gelişmiş arama ve filtreleme sistemi kurmayı kolaylaştırıyor.

    Rate this post

    Paylaş

    Bir yanıt yazın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    Bunlar da hoşunuza gidebilir...