İçindekiler
WordPress'te her içerik bir yazı türüne (post type) aittir. Varsayılan olarak "Yazılar" (post) ve "Sayfalar" (page) gelir. Görseller (attachment), menü öğeleri ve revizyonlar da arka planda birer yazı türüdür.
Siteniz bloğun ötesine geçtiğinde, farklı içerik türleri ortaya çıkar: bir ajansın referansları, bir kliniğin doktorları, bir derneğin etkinlikleri, bir emlak sitesinin ilanları. Bunları blog yazılarıyla aynı yerde, kategorilerle ayırarak yönetmek mümkündür. Ama bir süre sonra şu sorunlar başlar:
- Blog arşivinde referanslar, ilanlar ve blog yazıları karışır.
- Her türün kendine özgü alanları (etkinlik tarihi, ilan fiyatı) bütün yazılarda görünür.
- İçerik ekleyen kişi için hangi yazının nereye ait olduğu belirsizleşir.
Özel yazı türü (custom post type, CPT), bu içeriklere yönetim panelinde kendi menülerini, kendi adreslerini ve kendi şablonlarını verir.
Kodu nereye yazmalı?
Özel yazı türünü temanın functions.php dosyasına değil, küçük bir eklentiye yazın. Sebebi şudur: Temayı değiştirdiğinizde içerik türünüz de kaybolur. İçerikler veritabanında durmaya devam eder ama yönetim panelinde görünmez olur. İçerik yapısı temaya değil, siteye aittir.
wp-content/plugins/site-icerikleri/site-icerikleri.php:
<?php
/**
* Plugin Name: Site İçerikleri
* Description: Referans içerik türü.
*/
add_action( 'init', function () {
register_post_type( 'referans', [
'labels' => [
'name' => 'Referanslar',
'singular_name' => 'Referans',
'add_new_item' => 'Yeni referans ekle',
'edit_item' => 'Referansı düzenle',
'all_items' => 'Tüm referanslar',
],
'public' => true,
'has_archive' => true,
'rewrite' => [ 'slug' => 'referanslar' ],
'menu_icon' => 'dashicons-portfolio',
'supports' => [ 'title', 'editor', 'thumbnail', 'excerpt' ],
'show_in_rest' => true,
] );
} );
Eklentiyi etkinleştirdiğinizde yönetim panelinde "Referanslar" menüsü belirir.
Önemli parametreler
- public: İçerik ziyaretçilere görünür olsun mu? Yalnızca yönetim panelinde kullanılacak bir tür (örneğin iç notlar) için
falseyapın. - has_archive:
trueolduğunda/referanslar/adresinde bütün referansların listelendiği bir arşiv sayfası oluşur. - rewrite → slug: Adreslerde kullanılacak kısım.
/referanslar/abc-sirketi/gibi. - supports: Düzenleme ekranında hangi alanların bulunacağı: başlık, içerik, öne çıkan görsel, özet, yorumlar, özel alanlar ve diğerleri.
- show_in_rest: Blok editörünün (Gutenberg) bu türde çalışması için
trueolmalıdır. Aynı zamanda içeriği REST API üzerinden erişilebilir kılar. - menu_icon: Yönetim menüsünde gösterilecek simge. WordPress'in Dashicons setinden seçilebilir.
Kalıcı bağlantıları yenileyin
Yeni bir yazı türü eklediğinizde ya da slug değerini değiştirdiğinizde, adresleri başlangıçta 404 verebilir. Ayarlar → Kalıcı Bağlantılar sayfasını açıp "Değişiklikleri kaydet" düğmesine basmanız ya da şu komutu çalıştırmanız yeterlidir:
wp rewrite flush
Bu işlemi her sayfa yüklemesinde kodla yapmayın; çok maliyetlidir. Yalnızca eklenti etkinleştirildiğinde bir kez yapılması yeterlidir.
Özel sınıflandırma (taxonomy)
Referansları sektöre göre gruplamak isterseniz, yazılardaki kategorilere benzer özel bir sınıflandırma ekleyebilirsiniz:
add_action( 'init', function () {
register_taxonomy( 'sektor', 'referans', [
'labels' => [ 'name' => 'Sektörler', 'singular_name' => 'Sektör' ],
'hierarchical' => true,
'rewrite' => [ 'slug' => 'sektor' ],
'show_in_rest' => true,
'show_admin_column' => true,
] );
} );
hierarchical: true kategoriler gibi alt öğeleri olan bir yapı, false ise etiketler gibi düz bir yapı oluşturur. show_admin_column, referans listesinde sektörü bir sütun olarak gösterir.
Şablonlar
WordPress, bir içerik türünü gösterirken şablon hiyerarşisine göre sırayla dosya arar:
- Tek bir referans için:
single-referans.php, bulamazsasingle.php, o da yoksaindex.php. - Arşiv sayfası için:
archive-referans.php, sonraarchive.php.
Blok temalarda aynı mantık şablon dosyalarıyla (single-referans.html) ya da Site Düzenleyicisi'nden yeni bir şablon oluşturularak uygulanır.
Bu şablonları temanızda (ya da tema güncellemelerinden etkilenmemesi için alt temanızda) oluşturun.
Özel alanlar
Etkinlik tarihi, ilan fiyatı, doktorun uzmanlık alanı gibi yapılandırılmış veriler için özel alanlar (post meta) kullanılır. Bunları register_post_meta() ile kaydedip REST API ve blok editöründe kullanılabilir hâle getirebilirsiniz. Ancak düzenleme arayüzü gerektiğinde ACF gibi bir alan eklentisi zaman kazandırır. Kodla yazmak ile eklenti kullanmak arasındaki tercih, projenin büyüklüğüne ve kimin bakım yapacağına bağlıdır.
Ne zaman özel yazı türü gerekmez?
İçerik, blog yazılarıyla aynı alanlara sahipse ve aynı listede görünmesinde sakınca yoksa, bir kategori yeterlidir. Tek ve sabit bir sayfa için de (örneğin "Hakkımızda") özel tür değil, normal bir sayfa kullanın. Özel yazı türü, aynı yapıda çok sayıda içerik olduğunda ve bu içeriklerin kendine ait bir arşivi, şablonu ya da alanları olması gerektiğinde değerlidir.
Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.