Register_post_type()

WordPress Fonksiyonları
register_post_type( string $yazi_tipinin_adi, array|string $argumanlar = array() )

Açıklaması:

Register_post_type() fonksiyonu, WordPress temasında kullanılmak üzere, yazılara veya sayfalara benzeyen ve adına özel yazı (içerik) tipleri (custom post type) denen içerik tipleri eklemeye yarar. Register_post_type() fonksiyonu ile bir içerik tipi oluşturduğumuzda, yönetim panelinde bu içerik tipi için bir ana menü oluşacaktır. Bu menü ile, bu içerik tipinde içerikler oluşturabilmemiz mümkün olacaktır.

Parametreleri:

$yazi_tipinin_adi

(Zorunludur.) Oluşturmak istediğimiz yazı tipinin kimliğidir.

$argumanlar = array(...);
register_post_type( 'satilik-arabalar', $argumanlar);

// Yukarıda kaydettiğimiz yazı tipindeki içerikleri çağırıyoruz
$satilik_arabalar_gelsin_bakalim = get_posts( array('post_type' => 'satilik-arabalar'));

Bu parametreye verilen değer:

  • 20 karakteri geçmemelidir.
  • Türkçe karakter içermemelidir.
  • Boşluk içermemelidir.
  • Küçük harflerden oluşmalıdır.
  • Tire ve alt tire işaretleri içerebilir.

Bu parametre için verdiğiniz değerde, izin verilmeyen bir karakter varsa, bu karakter belirttiğiniz isimden silinecektir. 20 karakteri geçen isimlerde ise bir hata mesajı yayınlanacaktır.

$argumanlar

(string|array) Genellikle dizi formatında kullanılan bir değişkendir. Bu parametre ile oluşturulacak içerik tipinin özelliklerine karar veririz. Bu parametrenin bir çok argümanında, varsayılan değerler, eklediğimiz içerik tipinin özelliğine göre değişmektedir. Yazılara benzeyen bir içerik tipi ekliyorsak, varsayılan değerleri yazılar için kullanılan değerler ile aynı olacak, sayfalara benzeyen bir içerik tipi ekliyorsak, varsayılan değerleri sayfalar için kullanılan değerlerin aynıları olacaktır.

Bu parametrenin kabul ettiği argümanlar şunlardır:

‘label’

İçerik türünün etiketidir, başlığıdır. Bu argümanda genellikle, “Kitaplar”, “Filmler”, “Satılık Evler“… gibi kısa ve çoğul ifadeler kullanılır.

'label' argümanın varsayılan değeri, hemen aşağıda bahsettiğimiz 'labels' argümanının bir alt argümanı olan, 'name' argümanının değeridir. 'name' argümanına bir değer verirsek, 'label' argümanı kullanılmayacaktır.

‘labels’

Örneğin, Yazılar için, yönetim panelinde bir çok özel ifade görürsünüz. Mesela, yönetim panelinde, Yazılar diye bir ana menü vardır, bu menünün altında “Tüm yazılar” ve “Yeni ekle” diye alt menüler vardır. Yine, bir yazıyı güncellediğimizde, “Yazı güncelledi. Yazıyı görüntüle.” şeklinde bir mesaj alırız. Bir içerik tipi için bütün bu ifadeler, mesajlar bu argüman ile oluşturulur. Eklediğimiz yazı tipi için de bunun gibi özel ifadeler oluşturmak istiyorsak, 'labels' argümanını kullanmalıyız.

'labels' argümanının alt argümanları, klasik editör düşünülerek oluşturulmuştur. Bu yüzen, Blok Editör (Gutenberg) kullanırken bu argümanlardan bazılarına ihtiyacınız olmayabilir.

'labels' argümanı, bir dizidir ve bir çok alt argümana sahiptir. Aşağıda bu alt argümanlar açıklanmıştır.


  • 'name' : Oluşturduğumuz içerik tipinin genel adıdır. Bu argümanda genellikle, “Kitaplar”, “Filmler”, “Satılık Evler“… gibi kısa ve çoğul ifadeler kullanılır. Varsayılan değeri "Posts" veya "Pages" olarak ayarlanmıştır. Bu argümanı boş bırakırsak veya kullanmazsak, eklediğimiz içerik tipinin adı için, yukarıda gördüğümüz 'label' argümanın değeri kullanılır.
  • 'singular_name' : Oluşturduğumuz içerik tipinin tekil adıdır. Genel adı “Kitaplar” olan bir içerik tipi oluşturuyorsak, bu argümanın değeri “Kitap” olacaktır.
  • 'add_new' : “Yeni ekle” demektir. Yönetim panelinde, oluşturduğumuz içerik tipine ait ana menünün, yeni bir içerik oluşturmak için kullanılacak alt menüsünün ismidir. Varsayılan değeri “Yeni ekle” (“Add New”) olarak ayarlanmıştır. Bu argümana bir değer verirken, diğer içerik tipleri ile karışmaması için, _x() fonksiyonunun kullanılması tavsiye edilir. Örnek: _x('Yeni ekle','kitaplar için kullanılacak','textdomain') Bu şekilde, tercüme edilirken, “Yeni ekle” ifadesinin bu içerik tipi için olduğu anlaşılacaktır.
  • 'add_new_item' : İçerik tipinin adını kullanarak, bir “Yeni ekle” ifadesi oluşturmak için kullanılır. Mesela; “Kitap ekle” gibi. Varsayılan değeri, “Yeni yazı ekle” (“Add New Post”) veya “Yeni sayfa ekle” (“Add New Page”) olarak ayarlanmıştır. Klasik editör ile içerik eklenen sayfanın başlığı olarak kullanılır. Örnek: “Yeni kitap ekle”
  • 'edit_item' : Bu içerik tipindeki bir içeriği düzenlemek için oluşturulan bağlantılara verilecek addır. Varsayılan değeri, “Yazıyı düzenle” (“Edit Post”) veya “Sayfayı düzenle” (“Edit Page”) olarak ayarlanmıştır. Klasik editör ile içeriği düzenlediğimiz sayfanın başlığı olarak kullanılır. Örnek: “Kitabı düzenle”
  • 'new_item' : Bu içerik tipine ait, yeni bir içerik eklemek için gidilecek sayfaya götüren bağlantılara verilecek addır. Varsayılan değeri, “Yazıyı düzenle” (“New Post”) veya “Sayfayı düzenle” (“New Page”) olarak ayarlanmıştır. Örnek: “Yeni kitap”
  • 'view_item' : Bu içerik tipine ait bir içeriği görüntülemek için oluşturulan bağlantılara verilecek addır. Varsayılan değeri, “Yazıyı görüntüle” (“View Post”) veya “Sayfayı görüntüle” (“View Page”) olarak ayarlanmıştır. Örnek: “Kitabı gör”
  • 'view_items' : Bu içerik tipine ait, bir içerik arşivini görüntülemek için oluşturulan bağlantılara verilecek addır. Varsayılan değeri, “Yazıları görüntüle” (“View Posts”) veya “Sayfaları görüntüle” (“View Pages”) olarak ayarlanmıştır. Örnek: “Kitapları görüntüle”
  • 'search_items' : Bu içerik tipine ait içerikler aramak için oluşturulan bağlantılara verilecek addır. Varsayılan değeri, “Yazılarda ara” (“Search Posts”) veya “Sayfalarda ara” (“Search Pages”) olarak ayarlanmıştır. Örnek: “Kitaplarda ara”
  • 'not_found' : Bir arama sonucunda, bu içerik tipine ait herhangi bir içerik bulunmadığında verilecek mesajdır. Varsayılan, değeri “Hiç yazı bulunamadı” (“No posts found”) veya “Hiç sayfa bulunamadı” (“No pages found”) olarak ayarlanmıştır. Örnek: “Kitap bulunmadı”
  • 'not_found_in_trash' : Çöpte, bu içerik tipine ait herhangi bir içerik bulunmadığında verilecek mesajdır. Varsayılan değeri, “Çöp kutusu içinde bulunan yazı yok.” (“No posts found in Trash”) veya “Çöp kutusu içinde bulunan sayfa yok.” (“No pages found in Trash”) olarak ayarlanmıştır. Örnek: “Çöpte hiç kitap bulunmadı”
  • 'parent_item_colon' : Bu içerik tipindeki bir içeriğin ebeveyni olan içerikleri belirtmek için kullanılan ifadedir. Bu argüman, sayfalar gibi hiyerarşik yapıdaki içerip tiplerinde kullanılır. Varsayılan değeri, “Parent page:” olarak ayarlanmıştır. Örnek : “Ebeveyni:
  • 'all_items' : Bu içerik tipine ait bütün içerikleri görüntülemek için oluşturulan bağlantılara verilecek addır. Varsayılan değeri,“Tüm yazılar” (“All Posts”) veya “Tüm sayfalar” (“All Pages”) olarak ayarlanmıştır. Örnek: “Bütün kitaplar”
  • 'archives' : Yönetim panelinde, Görünüm->Menüler sayfasında kullanılan ifadedir. Bu sayfada, bu içerik tipindeki içerikleri menüye eklemek için oluşturulan bölümde, Tümünü göster sekmesinin altındaki listenin en üstünde görünür (Aşağıdaki resme bakınız). Bu ifade menüye eklendiğinde, bu menü ziyaretçiyi, içerik tipine ait arşive götürecektir. Varsayılan değeri “Yazı arşivi” (“Post Archives”) veya “Sayfa arşivi” (“Page Archives”) olarak ayarlanmıştır. Aşağıda, “Kitaplar” adında oluşturulmuş bir içerik tipinde, bu argümana verilmiş “Kitap Arşivi” değerini (kırmızı okun gösterdiği değer) görüyorsunuz.
Register_post_type() Fonksiyonu
  • 'attributes' : Bu tipteki bir içeriği düzenlerken, düzenleme sayfasının sağ kenarında bulunan, ve bazı özellikleri yöneten bölümünün (meta box) başlığıdır. Varsayılan değeri “Yazı özellikleri” (“Post Attributes”) veya “Sayfa özellikleri” (“Page Atrributes”) olarak ayarlanmıştır. Örneğin; sayfa tipindeki içerikler için, alttaki resimde görüldüğü gibi, bu argümanın değeri, “Sayfa özellikleri” şeklindedir:
Register_post_type() Fonksiyonu
  • 'insert_into_item' : WordPress’in 5.0 sürümünden önce kullandığı klasik editörde kullanılan bir ifadedir. Editörde, içeriğe eklemek için, ortam kütüphanesinden bir resim seçildiğinde, seçilen resmi ekleme butonu üzerinde bu ifade yazar. Varsayılan değeri “Yazıya ekle” (“Insert into post”) veya “Sayfaya ekle” (“Insert into page”) olarak ayarlanmıştır. Örnek: “Resmi kitaba ekle”
  • 'uploaded_to_this_item' : Klasik editör ile bir içerik düzenlerken, “Ortam ekle” penceresine gidip, “Ortam kütüphanesi” sekmesini açarsak, resimlerin üstündeki filtreleme alanlarından ilkinde bu ifadeyi görürüz. Bu ifade, sadece düzenlenen içerik için yüklenmiş resimleri görmemizi sağlayan filtre ifadesidir. Varsayılan değeri “Bu yazıya yüklenmiş” (“Uploaded to this post”) veya “Bu sayfaya yüklenmiş” (“Uploaded to this page”) olarak ayarlanmıştır. Örnek: “Bu kitap için yüklenenler”
  • 'featured_image' : Bu tipteki bir içeriği düzenlerken, öne çıkan görsel ekleme özelliğini yöneten bölümün başlığıdır. Varsayılan değeri “Öne çıkan görsel” (“Featured Image”) olarak ayarlanmıştır. Örnek: “Kitabın kapak resmi”
  • 'set_featured_image' : Bir içeriğe öne çıkan görsel seçmek için oluşturulan bağlantının adıdır. Klasik editörde, öne çıkan görsel seçtiğimizde, bu görselin seçimini tamamlamak için tıklanan butonda da bu ifade kullanılır. Varsayılan değeri, “Öne çıkan görsel belirle” (“Set featured image”) olarak ayarlanmıştır. Örnek: “Kapak resmi ekle”
  • 'remove_featured_image' : Bir içeriğin öne çıkan görselini kaldırmak için oluşturulan bağlantının adıdır. Varsayılan değeri, “Öne çıkan görseli kaldır” (“Remove featured image”) olarak ayarlanmıştır. Örnek: “Kapak resmini kaldır”
  • 'use_featured_image' : Klasik editörde, ortam kütüphanesindeki bir resmi, öne çıkan görsel olarak kullanmak için oluşturulmuş bağlantının adıdır. Varsayılan değeri, “Öne çıkan görsel olarak kullan” (“Use as featured image”) olarak ayarlanmıştır. Örnek: “Kapak resmi olarak kullan”
  • 'filter_items_list' : Bu tipteki içeriklerin listelendiği sayfada, ekran okuyucular için yerleştirilmiş texttir (screen reader text). Varsayılan değeri “Yazı listesini filtrele” (“Filter posts list”) veya “Sayfa listesini filtrele” (“Filter pages list”) olarak ayarlanmıştır. Örnek: “Kitap listesini filtrele”
  • 'items_list_navigation' : Bu tipteki içeriklerin listelendiği sayfanın sayfalama kısmında, ekran okuyucular için yerleştirilmiş texttir (screen reader text). Varsayılan değeri “Yazı listesi dolaşımı” (“Posts list navigation”) veya “Sayfa listesi dolaşımı” (“Pages list navigation”) olarak ayarlanmıştır. Örnek: “Kitap listesi sayfaları”
  • 'items_list' : Bu tipteki içeriklerin listelendiği sayfada, ekran okuyucular için yerleştirilmiş texttir (screen reader text). Varsayılan değeri “Yazı listesi” (“Posts list”) veya “Sayfa listesi” (“Pages list”) olarak ayarlanmıştır. Örnek: “Kitap listesi”
  • 'name_admin_bar' : Yönetim panelinde, üst menü de bulunan +Yeni menüsüne eklenecek ifadeyi belirler. Varsayılan değeri 'singular_name' argümanının değeridir.
Register_post_type() Fonksiyonu

Aşağıda verilen alt argümanlar, WordPress 5.0 sürümü ile birlikte gelmiştir:

  • 'item_published' : Bu içerik tipindeki bir içerik yayınlandığı zaman sayfanın üst kısmında verilecek mesajdır. Varsayılan değeri, “Yazı yayınlandı.” (“Post published.”) veya “Sayfa yayınlandı.” (“Page published.”) olarak ayarlanmıştır. Örnek: “Kitap yayınlandı.”
  • 'item_published_privately' : Bu içerik tipindeki bir içerik özel olarak (şifreli) yayınlandığı zaman sayfanın üst kısmında verilecek mesajdır. Varsayılan değeri, “Yazı özel olarak yayınlandı.” (“Post published privately.”) veya “Sayfa özel olarak yayınlandı.” (“Page published privately.”) olarak ayarlanmıştır. Örnek: “Kitap özel olarak yayınlandı.”
  • 'item_reverted_to_draft' : Bu içerik tipinde yayınlanmış bir içerik taslağa dönüştürüldüğünde, sayfanın üst kısmında verilecek mesajdır. Varsayılan değeri, “Yazı taslağa geri dönüştürüldü.” (“Post reverted to draft.”) veya “Sayfa taslağa geri dönüştürüldü.” (“Page revetred to draft.”) olarak ayarlanmıştır. Örnek: “Kitap taslağa çevrildi.”
  • 'item_scheduled' : Bu tipteki bir içerik, ileri bir tarih belirtilerek yayınlandığı zaman, sayfanın üst kısmında verilecek mesajdır. Varsayılan değeri, “Yazı güncellendi.” (“Post scheduled.”) veya “Sayfa güncellendi.” (“Page scheduled.”) olarak ayarlanmıştır. Örnek: “Kitap ileri bir tarih için güncellendi.”
  • 'item_updated' : Bu tipteki bir içerik güncellendiği zaman, sayfanın üst kısmında verilecek mesajdır. Varsayılan değeri, “Yazı güncellendi.” (“Post updated.”) veya “Sayfa güncellendi.” (“Page updated.”) olarak ayarlanmıştır. Örnek: “Kitap ileri bir tarih için güncellendi.”

‘description’

Eklediğimiz içerik tipi için kısa bir açıklama metnidir. Varsayılan değeri boştur.

Temanızın arşiv sayfalarında, içerik tipine ait açıklamaları da göstermek isterseniz:

Önce içerik tipinin açıklamasını kaydettik.

functions.php :

<?php
$argumanlar = array (
    // ... diğer argümanlar
    'description' => 'Bu içerik tipi şu tür içerikler içindir.',
    // ... diğer argümanlar
);

register_post_type ( 'icerik-tipim', $argumanlar );
?>

Sonra da temamızın arşiv şablonunda, -artık archive.php, home.php, index.php dosyalarından hangisini hangisini kullanıyorsanız- bu açıklamayı sayfanın üstünde gösterdik. (Bu konuda bir fikriniz yoksa Şablon Hiyerarşisi yazımız sizi aydınlatacaktır.)

archive.php veya home.php veya index.php:

<header>
// ... önceki kodlar
<?php
if ( is_post_type_archive() ) {
    global $wp_post_types;
    $pt = get_query_var ( 'post_type' );
    if ( is_string( $pt ) ) {
        if ( ! empty( $wp_post_types[ $pt ]->description ) ) {
            echo $wp_post_types[ $pt ]->description;
        }
    }
}
//... sonraki kodlar
?>
</header>

Şu kodu da kullanabilirsiniz (Bu kod da, sadece belli bir içerik tipinin açıklamasını ekrana bastırır):

// Sadece 'ozel_yazi_tipim' adındaki yazı tipinin açıklamasını getirir
$obj = get_post_type_object( 'ozel_yazi_tipim' );
echo esc_html( $obj->description );

‘public’

(bool) Diğer bazı argümanların varsayılan değerlerini belirleyerek, oluşturulan içerik tipinin, yazarlar ve okuyucular için görünürlük durumunu belirler. true/false değerlerinden birini alır. Varsayılan değeri false olarak ayarlanmıştır.

WordPress ile birlikte gelen içerik tiplerinden; yazı, sayfa ve ortam dosyası tipindeki içeriklerde 'public' argümanı true değerini alır, dolaşım menüsü (nav_menu_item) ve sürüm (revision) tipindeki içeriklerde ise false değerini alır.

Değerleri 'public' argümanına verdiğimiz değere bağlı olan argümanlar ve varsayılan değerleri şunlardır:

  • 'publicly_queryable' : Varsayılan değeri 'public' argümanına verdiğimiz değerdir.
  • 'show_ui' : Varsayılan değeri 'public' argümanına verdiğimiz değerdir.
  • 'show_in_nav_menus' : Varsayılan değeri 'public' argümanına verdiğimiz değerdir.
  • 'exclude_from_search' : Varsayılan değeri 'public' argümanına verdiğimiz değerinin tersidir.

‘hierarchical’

(bool) Oluşturulan içerik tipinin, hiyerarşik bir yapıda olup olmayacağını belirler. Hiyerarşik yapıda olmak demek, tıpkı sayfalar gibi, bir içeriğe üst veya alt içerikler atayabilmek demektir. true/false değerlerinden birini alır. Varsayılan değeri false olarak ayarlanmıştır, yani hiyerarşik yapı oluşmaz.

‘exclude_from_search’

(bool) Oluşturulan tipteki içeriklerin, arama sonuçlarında görünüp görünmeyeceğini belirler. true/false değerlerinden birini alır. Varsayılan değeri, 'public' argümanına verilen değerin tersidir.

Bu argümanın değeri:

  • true ise – siteadim.com/?s=aranan-kelime ifadesi, oluşturduğumuz içerik tipindeki içerikleri kapsamaz. Bunun yanında, bu içerikler arşiv sayfalarında sıralanmaz ve bu sayfalarda sayfalama özelliği 404 hataları verebilir.
  • false ise – siteadim.com/?s=aranan-kelime ifadesi, oluşturduğumuz içerik tipindeki içerikleri kapsar. Bunun yanında, bu içerikler arşiv sayfalarında da sıralanır.

‘publickly_queryable’

(bool) Oluşturulan içerik tipi için, sitemizin ön yüzündeki URL ifadelerinde get parametreleri kullanımını açar ya da kapatır. true/false değerlerinden birini alır. Varsayılan değeri, 'public' argümanına verilen değere eşittir.

Bu argüman true değerini aldığında, içerik tipi parse_request() fonksiyonu tarafından da tanınır ve şu query (sorgu) ifadeleri çalışır:

İçerik tipinin adını 'kitaplar' olarak kaydettiğimizi varsayalım:

  • benimsitem.com/?post_type=kitaplar : Bu sorgu ifadesi (query string), bizi doğrudan “kitaplar” tipindeki içerik arşivine götürür.
  • benimsitem.com/?kitaplar=orman-perisi : Bu sorgu ifadesi bizi, “kitaplar” tipinde oluşturulmuş “Orman Perisi” adlı içeriğe götürür.

Yukarıdaki get parametrelerinin anahtar ve değerlerini 'rewrite' argümanı ile değiştirebiliriz.

‘show_ui’

(bool) Oluşturulan içerik tipi için, sitemizin yönetim panelinde, yazı ve sayfalar gibi bir kullanıcı arayüzü oluşturulup oluşturulmayacağını belirler. true/false değerlerinden birini alır. Varsayılan değeri, 'public' argümanına verilen değere eşittir. true değeri alırsa, bu tipteki içerikler de yazılar veya sayfalar gibi, yönetim panelinden kontrol edilebilirler.

‘show_in_nav_menus’

(bool) Oluşturulan içerik tipi için, sitemizin yönetim panelindeki, Görünüm->Menüler sayfasında, bir bölüm oluşturulup oluşturulmayacağını belirler. true/false değerlerinden birini alır. Varsayılan değeri, 'public' argümanına verilen değere eşittir. true değeri alırsa, bu tipteki içerikler için de, yazılar veya sayfalar gibi menülerde kullanılabilir.

‘show_in_menu’

(bool|string) Yönetim panelinde, bu içerik tipine ait bir menü oluşturulup oluşturulmayacağını belirler. Bu argümanın bir menü oluşturabilmesi için 'show_ui' argümanının true değerini almış olması gerekmektedir. Varsayılan değeri 'show_ui' argümanının değeridir.

'show_in_menu' argümanına verilebilecek değerler şunlardır:

  • false – İçerik tipi için, yönetim panelinde bir menü oluşmaz.
  • true – İçerik tipi için, yönetim panelinde yazılar ve sayfalar gibi bir menü oluşur.
  • 'ust-menu-url-ifadesi' – Bu argümanda belirteceğimiz bir ana menü adresi ile, bu içerik tipi için o ana menüye ait bir alt menü oluşturulmasını sağlarız. Mesela, bu argümana, 'post.php' değerini verirsek, bu tipteki içerikler için, Yazılar menüsünde bir alt menü oluştururuz, 'edit.php?post_type=page' değerini verirsek, Sayfalar menüsünde bir alt menü oluştururuz. Bu argümanın değerini bulmak için, yönetim panelinde iken, kullanmak istediğiniz ana menüye tıklayın, adres çubuğunda wp-admin/ ifadesinden sonra gelen kısmı bu argümana değer olarak atayın. Bu durumda o ana menüde, bu tipteki içerikler için bir alt menü oluşacaktır.

Bu argümana, bir eklentinin oluşturduğu bir ana menüye ait 'ust-menu-url-ifadesi' değeri verilirse, içerik tipi, eklenti ile oluşturulan ana menüdeki ilk alt menü olarak oluşacak ve ana menü linkinin yerini de değiştirecektir. Bunun önüne geçmek için, eklentinin 'admin-menu' kancası ile menüyü oluşturan kodu, add_action() tetikleyicisi ile, 9 ve daha aşağı bir öncelik ile tetiklenmelidir.

‘show_in_admin_bar’

(bool) İçerik tipinin, yönetim panelindeki admin barda (yönetim panelinde, sayfanın en üstündeki yatay menünün ve +Yeni yazan elemanında) görünüp görünmeyeceğini belirler. Varsayılan değeri 'show_in_menu' argümanının aldığı değerdir.

‘menu_position’

(int) Bu içerik tipi için yönetim panelinde oluşturulacak ana menünün pozisyonunu belirler. Bu argümanın çalışması için 'show_in_menu' argümanın true değeri almış olması gerekir. Varsayılan değeri null olarak ayarlanmıştır.

Bu değişkene bir sayı girerek, eklenecek menünün, nereye yerleştirileceğini tarif etmiş olursunuz. Yapmanız gereken şey, hangi iki menü arasını seçmek istiyorsanız, o iki menünün, yerleşim numaraları arasında bir sayı seçmektir. Aşağıda, yönetim panelinde bulunan, her bir ana menünün yerleşim numarası verilmiştir:

  • 2 – Başlangıç
  • 4 – ayraç
  • 5 – Yazılar
  • 10 – Ortam
  • 15 – Bağlantılar (Artık Yok)
  • 20 – Sayfalar
  • 25 – Yorumlar
  • 59 – ayraç
  • 60 – Görünüm
  • 65 – Eklentiler
  • 70 – Kullanıcılar
  • 75 – Araçlar
  • 80 – Ayarlar
  • 99 – ayraç

‘menu_icon’

Menü için kullanılacak ikonun url adresidir. Varsayılan değeri, Yazılar ana menüsünün ikonudur.

  • Base64 formatında kodlanmış ve renk şemasına uygun olarak renklendirilmiş bir SVG dosyası olabilir. Base64 kodu su şekilde başlamalıdır: ‘data:image/svg+xml;base64,
  • Tema dizininizdeki bir ikonu ayarlamak için get_template_directory_uri() . "/images/benim-ikonum.png" şeklinde bir değer kullanabilirsiniz.
  • WordPress’in Dashiconları‘nı kullanabilirsiniz. Mesela ‘dashicons-chart-pie‘ gibi bir değer girebilirsiniz.’
  • İkon kullanmak istemiyorsanız da ‘‘ değeri vermelisiniz. Boş iken de, div.wp-menu-image elemanına, CSS ile ulaşıp bir ikon ekleyebilirsiniz.

‘capability_type’

(string|array) WordPress’in bu içerik tipi için oluşturacağı read, edit ve delete yetkilendirmelerinde (capabilities) kullanılacak son ektir. Argümana, değer olarak, tek bir ifade de atayabiliriz, sırasıyla bir tekil bir çoğul ifade içeren bir dizi de atayabiliriz. Varsayılan değeri "post" olarak ayarlanmıştır.

Örneğin, bu argümana array('book','books') değerini verdiğimizi düşünelim. Bu durumda, bu içerik tipine ait yetkiler şöyle olacaktır:

'capabilities' => array(
  'edit_post'          => 'edit_book', 
  'read_post'          => 'read_book', 
  'delete_post'        => 'delete_book', 
  'edit_posts'         => 'edit_books', 
  'edit_others_posts'  => 'edit_others_books', 
  'publish_posts'      => 'publish_books',       
  'read_private_posts' => 'read_private_books', 
  'create_posts'       => 'edit_books', 
),

İçerik tipinize özel olarak oluşturduğunuz yetkileri görmek isterseniz, $GLOBALS['wp_post_types']['icerik_tipinin_adi'] dizisini ekrana bastırabilirsiniz. Bunu yaptığınızda şöyle bir kod ile karşılaşacaksınız:

[cap] => stdClass Object
	(
		// Meta capabilities
		[edit_post] => edit_book
		[read_post] => read_book
		[delete_post] => delete_book

		// map_meta_cap() fonksiyonu dışında kullanılan alt yetkiler (Primitive capabilities):
		[edit_posts] => edit_books
		[edit_others_posts] => edit_others_books
		[publish_posts] => publish_books
		[read_private_posts] => read_private_books

		// map_meta_cap() fonksiyonu içinde kullanılan alt yetkiler (Primitive capabilities):
		[create_posts] => edit_books
	)

Yukarıda oluşan ifadelerden herhangi birini değiştirmek istersek, 'capabilities' argümanı ile değiştirebiliriz.

Bu argümanın çalışabilmesi için 'map_meta_cap' argümanının değerinin null veya false olması gerekmektedir.

‘capabilities’

(array) Bu içerik tipine ait yetkiler dizisidir. Varsayılan değerleri 'capability_type' argümanının oluşturduğu değerlerdir.

'capabilities' argümanı için oluşturulacak dizi, varsayılan olarak yedi anahtara sahiptir. Bu anahtarlar şunlardır:

  • 'edit_post', 'read_post' ve 'delete_post' – Bu üç anahtar meta capabilities (meta yetkiler) olarak adlandırılır ve genellikle hepsi birlikte bağışlanmaz, düşük yetki (primitive capabilities) seviyelerine paylaştırılırlar.
  • 'edit_posts' – Bu içerik türündeki içerikleri düzenleme yetkisidir.
  • 'edit_others_posts' – Diğer yazarların içeriklerini düzenleme yetkisidir.
  • 'publish_posts' – Bu tipteki içerikleri yayınlama yetkisidir.
  • 'read_private_posts' – Bu tipteki özel içerikleri okuma yetkisidir.

Bunlardan başka, düzenlenebilecek 8 yetki daha vardır. Ekleyebildiğimiz içerik tipine özel olarak, bu sekiz yetkiyi de düzenlemek istiyorsak 'map_meta_cap' argümanına true değerini atamamız gerekmektedir. Bahsettiğimiz bu yetenekler şunlardır:

  • 'read' – İçerik tipine ait içerikleri okuma yetkisidir.
  • 'delete_posts' – İçerik tipine ait içerikleri silme yetkisidir.
  • 'delete_private_posts' – İçerik tipine ait özel içerikleri silme yetkisidir.
  • 'delete_published_posts' – İçerik tipine ait yayınlanmış içerikleri silme yetkisidir.
  • 'delete_others_posts' – İçerik tipinde, diğer yazarlara ait içerikleri silme yetkisidir.
  • 'edit_private_posts' – İçerik tipine ait özel içerikleri düzenleme yetkisidir.
  • 'edit_published_posts' – İçerik tipine ait yayınlanmış içerikleri düzenleme yetkisidir.
  • 'create_posts' – İçerik tipine ait yeni içerikler oluşturma yetkisidir.

Bir 'capability_type' atarsanız ($capability_type) ve $GLOBALS ['wp_post_types'] ['icerik_tipinin_adi'] dizisine bir göz atarsanız, aşağıdakileri göreceksiniz:

[cap] => stdClass Object
(
	// Meta capabilities

	[edit_post]		 => "edit_{$capability_type}"
	[read_post]		 => "read_{$capability_type}"
	[delete_post]		 => "delete_{$capability_type}"

	// map_meta_cap() fonksiyonu dışında kullanılan alt yetkiler (Primitive capabilities):

	[edit_posts]		 => "edit_{$capability_type}s"
	[edit_others_posts]	 => "edit_others_{$capability_type}s"
	[publish_posts]		 => "publish_{$capability_type}s"
	[read_private_posts]	 => "read_private_{$capability_type}s"

	// map_meta_cap() fonksiyonu içinde kullanılan alt yetkiler (Primitive capabilities):

	[read]                   => "read",
	[delete_posts]           => "delete_{$capability_type}s"
	[delete_private_posts]   => "delete_private_{$capability_type}s"
	[delete_published_posts] => "delete_published_{$capability_type}s"
	[delete_others_posts]    => "delete_others_{$capability_type}s"
	[edit_private_posts]     => "edit_private_{$capability_type}s"
	[edit_published_posts]   => "edit_published_{$capability_type}s"
	[create_posts]           => "edit_{$capability_type}s"
)

‘map_meta_cap’

(bool) Bu içerik tipine özel bir yetki haritası kullanıp kullanmayacağımızı belirler. Varsayılan değeri null olarak ayarlanmıştır.

Bu argümanın değerini false olarak ayarlarsak, bu durumda klasik admin yetkileri, bu tipteki içerikleri düzenlemeye yetmeyecektir. Bu durumda, bu tipteki içeriklerin düzenlenebilmesi için kullanıcılara 'edit_post' yetkisinin atanması gerekmektedir.

‘hierarchical’

(bool) Oluşturulan içerik tipindeki içeriklerin sayfalar gibi hiyerarşik bir yapıda oluşturulabilmesini sağlar. Varsayılan değeri false olarak ayarlanmıştır.

Bu argümana true değerini atadığınızda, içerikleriniz arasında ebeveyn/yavru ilişkisi oluşur ve bu da sunucunuzda ekstra sorguların çalışmasına sebep olur. Eğer niyetiniz, bu içerik tipinde binlerce içerik oluşturmaksa, sınırlı bellek kaynaklarına sahip sunucuların bu parametrenin true değerine ayarlanmasıyla zorlanabileceğini unutmamalısınız.

‘supports’

(array|bool) Bu tipteki bir içeriği oluştururken ya da düzenlerken, sayfada olmasını istediğimiz bölümleri belirleyen parametredir. WordPress 3.5 ile birlikte bu argümana false değeri vererek sayfada, Yayımla hariç bütün bölümleri kapatabiliyoruz. Varsayılan değeri array('title', 'editor') yani başlık ve editör bölümleri olarak ayarlanmıştır.

Bu argümanın alabileceği değerler şunlardır:

  • 'title' – İçeriğin başlığını oluşturduğumuz bölüm
  • 'editor' – İçeriğin metnini oluşturduğumuz kısımdır.
  • 'author' – Yazar seçimi yapılan kısımdır.
  • 'thumbnail' – Öne çıkan görsel kısmıdır.
  • 'excerpt' – İçeriğin özetini girdiğimiz kısımdır.
  • 'trackbacks' – Geri izlemeleri gönderdiğimiz kısımdır.
  • 'custom-fields' – Özel alanlar kısmıdır.
  • 'comments' – Yorumlar kısmıdır.
  • 'revisions' – Sürüm bölümüdür.
  • 'page-attributes' Sayfa özellikleri kısmıdır.
  • 'post-formats' Yazı formatları (Biçim veya Yazı biçimi) kısmıdır.

Öne çıkan görsel kısmını aktive ederken, bu kısmın bir tema fonksiyonu olan add_theme_support() fonksiyonu ile desteklenmesi gerektiğini unutmayın.

‘register_meta_box_cb’

(callback) Bir callback fonksiyonu tanımlar. Bu fonksiyon, bu tipteki bir içerik düzenlenirken, bir özel alan (custom field) oluşturulduğunda tetiklenir. Burada tanımlanan callback fonksiyonu bir $post değişkeni içerir. Bu değişken düzenlenen içeriğe ait bir WP_Post nesnesi taşır.

‘taxonomies’

(array) Oluşturulan tipteki içerikler için kullanılabilecek, kategoriler, etiketler gibi bir sınıflandırma yöntemidir. Varsayılan değeri boştur.

Kaydedilen bir içerik tipi için, yine kaydedilmiş bir sınıflandırma yöntemi atama işlemi register_taxonomy_for_object_type() fonksiyonu yardımı ile de yapılabilir.

‘has_archive’

(bool|array) Bu argüman, bu tipteki içerikler için bir arşiv şablonu oluşturup oluşturamayacağımızı belirler. Varsayılan olarak false değeri verilmiştir.

Bu argümana;

  • true değerini verirsek, archive-{$yazi_tipinin_adi}.php şablonu ile bu tipteki içeriklere ait bir arşiv sayfası şablonu oluşturabiliriz.
  • false değerini verirsek, bu içerik tipine özel bir arşiv şablonu oluşturulamaz.
  • Eğer bu argümana, 'arsiv-adi' değerini verirsek, bu tipteki içeriklere ait arşiv sayfasına gittiğimizde, sayfanın URL değeri benimsitem.com/arsiv-adi/ şeklinde olacaktır. Bu değeri kullandığımızda, WordPress’i bu değere hazırlamak için Ayarlar->Kalıcı bağlantılar sayfasına giderek, Değişiklikleri kaydet butonuna basmamız gerekebilir. Bu argüman, aynı görevi gören ve 'rewrite' argümanının bir alt argümanı olan 'slug' ile ayarladığımız değerinin üzerine yazar.

‘rewrite’

(bool|array) Bu içerik tipi ile ilgili olarak oluşturulacak kalıcı bağlantıları (permalinks) belirler. Bu içerik tipi için, kalıcı bağlantılar kullanmak istemiyorsak bu argümana false değerini vermemiz gerekmektedir. Varsayılan olarak true değeri verilmiştir.

Bu argümanın aldığı bir dizi değeri vardır. Bu dizinin de çeşitli alt argümanları vardır. Aşağıda bu alt argümanlar verilmiştir:

  • 'slug' – Bu tipteki içerikler için kalıcı bağlantı olarak kullanılacak yapıdır. Varsayılan değer olarak, $yazi_tipinin_adi parametresinin değeri verilmiştir. Tercüme edilebilir bir değer de alabilir.
  • 'with_front' – (bool) Bu içerik tipine ait kalıcı bağlantının önünde temel bir kalıcı bağlantının olup olmayacağını belirler. Mesela, kalıcı bağlantınızın temel yapısı /blog/ şeklinde olsun. Bu argümana true değeri verdiğinizde, içerik tipinizin kalıcı bağlantısı /blog/icerik-tipim/ şeklinde olacak, false değeri verdiğinizde de /icerik-tipim/ şeklinde olacaktır. Varsayılan değeri true olarak ayarlanmıştır.
  • 'feed' – (bool) Bu içerik tipi için bir kalıcı bağlantı yapısının oluşturulup oluşturulamayacağını belirler. Varsayılan değeri 'has_archive' argümanın değeridir.
  • 'pages' – (bool) İçerik tipine ait kalıcı bağlantı yapısının, sayfalamalarda da kullanılıp kullanılamayacağını belirler.
  • 'ep_mask' – (const) Bu içerik tipi için bir endpoint maskesi oluşturur. Bu argüman tanımlanmazsa, varsayılan değer olarak 'permalink_epmask' argümanının değerini alır. 'permalink_epmask' argümanında da bir değer yoksa, EP_PERMALINK sabitinin değerini alır.

Eğer, özel içerik tipinizi, bir eklenti ile oluşturuyorsanız, eklentinizi etkinleştirirken ya da etkisizleştirirken flush_rewrite_rule() fonksiyonunu kullanmaya özen göstermelisiniz. Bu fonksiyon ile, içerik tipi için oluşturduğunuz kalıcı bağlantılar sorun olmayacaktır. Eğer bu fonksiyon kullanılmamışsa, eklentinin etkinleştirme ya da etkisizleştirme durumlarında, kalıcı bağlantıların tekrar ayarlanabilmesi için, Ayarlar->Kalıcı bağlantılar sayfasına giderek, Değişiklikleri kaydet butonuna basmamız gerekmektedir.

‘permalink_epmask’

WordPress’in varsayılan olarak oluşturduğu, kalıcı bağlantı endpoint bitmaskelerinden biridir. Varsayılan olarak EP_PERMALINK sabitinin değerini alır.

‘query_var’

(bool|string) Bu içerik tipi için bir query_var anahtarı (sorgu anahtarı) oluşturur. Bu sorgu anahtarı ile, URL değerlerindeki sorguları tanıyan fonksiyonlar (get_queried_object() gibi) yardımı ile ekrandaki içerik tipini veya içeriği tespit ederler. Varsayılan değeri, $yazi_tipinin_adi parametresinin değeridir.

  • 'false' değeri verilirse bu içerik tipi için bir query_var anahtarı oluşmaz. Bu yüzden de bu tipteki bir içerik benimsitem.com /?{query_var}={icerigin-link-adi} sorgusu ile yüklenmez.
  • 'true' değeri verilirse, içerik tipimizin $yazi_tipinin_adi parametresi de 'book' olarak kaydedildi ise, benimsitem.com/?book={icerigin-link-adi} sorgusu beklendiği gibi çalışır.
  • 'sorgu_ifadesi' değeri verilirse, benimsitem.com /?sorgu_ifadesi={icerigin-link-adi} sorgusu beklendiği gibi çalışacaktır.

'publicly_queryable' argümanına false değeri atanırsa, 'query_var' anahtarı çalışmayacaktır. 'query_var' argümanı, WordPress’in içerik tiplerinin sorgu ifadelerini barındıran 'query_vars' dizisine bu içerik tipi için bir sorgu ifadesi ekler. WordPress, bu dizide yer almayan sorgu ifadelerini siler.

‘can_export’

(bool) Bu içerik tipinin dışarı aktarılabilme özelliğini ayarlar. Varsayılan değeri true olarak ayarlanmıştır ve içerik tipi dışarı aktarılabilir.

‘delete_with_user’

(bool) Bu tipteki bir içeriğin yazarı silindiğinde, içeriğin de yazarı ile birlikte silinip silinmeyeceğini belirler. Bu argüman true değeri alırsa, yazarı silindiğinde içerik çöpe gider; false değeri alırsa, yazarı silindiğinde içeriğe birşey olmaz. Bu argüman boş bırakıldığında, içerik tipi post_type_supports('author') desteği içeriyorsa, yazarı silindiğinde içerik çöpe gider, içermiyorsa içerik etkilenmez. Varsayılan değeri null olarak ayarlanmıştır.

‘show_in_rest’

(bool) İçerik tipinin, REST API içinde gösterilip gösterilmeyeceğini belirler. Varsayılan değeri false olarak ayarlanmıştır. İçerik tipinin, Rest API ve Gutenberg block editör ile sorunsuz çalışabilmesi için, bu argümana true değeri verilmelidir.

‘rest_controller_class’

REST API uygulamısında kullanılmak üzere, WP_REST_Posts_Controller sınıfı yerine bu içerik tipine özgü bir kontrol edici (contorller) sınıf oluşturur. WP_REST_Controller sınıfının bir alt sınıfı olmak zorundadır. Varsayılan değeri, WP_REST_Posts_Controller olarak ayarlanmıştır.

‘_builtin’

(boolGenel kullanım için değildir.) Bu içerik tipinin, WordPress kurulumu ile birlikte gelen doğal bir içerik tipi olup olmadığını belirtir.

  • 'false'varsayılan – Bu özel bir içerik tipidir.
  • 'true' – Bu doğal bir içerik tipidir. (post, page, attachment, revision, nav_menu_item)

WordPress çekirdek ekibi, bu argümanı kullanmamanızı tavsiye eder.

‘_edit_link’

(bool ?- Genel kullanım için değildir.) Bu tipte bir içerik için düzenleme linkidir. Varsayılan değeri 'post.php?post=%d' olarak ayarlanmıştır.

Döndürdüğü değer:

(WP_Post_Type | WP_Error)

Kaydedilen içerik tipine ait bir nesne veya bir hata nesnesi döndürür.

Kaynak kodu:

Dizini : wp-includes/post.php

function register_post_type( $post_type, $args = array() ) {
    global $wp_post_types;
 
    if ( ! is_array( $wp_post_types ) ) {
        $wp_post_types = array();
    }
 
    // Sanitize post type name
    $post_type = sanitize_key( $post_type );
 
    if ( empty( $post_type ) || strlen( $post_type ) > 20 ) {
        _doing_it_wrong( __FUNCTION__, __( 'Post type names must be between 1 and 20 characters in length.' ), '4.2.0' );
        return new WP_Error( 'post_type_length_invalid', __( 'Post type names must be between 1 and 20 characters in length.' ) );
    }
 
    $post_type_object = new WP_Post_Type( $post_type, $args );
    $post_type_object->add_supports();
    $post_type_object->add_rewrite_rules();
    $post_type_object->register_meta_boxes();
 
    $wp_post_types[ $post_type ] = $post_type_object;
 
    $post_type_object->add_hooks();
    $post_type_object->register_taxonomies();
 
    /**
     * Fires after a post type is registered.
     *
     * @since 3.3.0
     * @since 4.6.0 Converted the `$post_type` parameter to accept a `WP_Post_Type` object.
     *
     * @param string       $post_type        Post type.
     * @param WP_Post_Type $post_type_object Arguments used to register the post type.
     */
    do_action( 'registered_post_type', $post_type, $post_type_object );
 
    return $post_type_object;
}

Kullanımı:

Örnek-1

Aşağıdaki örnek, ‘kitap‘ adında, yazılara benzeyen yani hiyerarşik olmayan bir içerik tipi ekler.

function ilktemam_kitap_tipi_icerik_ekle() {
    $labels = array(
        'name'                  => __( 'Kitaplar', 'textdomain' ),
        'singular_name'         => __( 'Kitap', 'textdomain' ),
        'menu_name'             => __( 'Kitaplar', 'textdomain' ),
        'name_admin_bar'        => __( 'Kitap', 'textdomain' ),
        'add_new'               => _x( 'Yeni ekle', 'Kitap ekliyoruz', 'textdomain' ),
        'add_new_item'          => __( 'Yeni kitap ekle', 'textdomain' ),
        'new_item'              => __( 'Yeni kitap', 'textdomain' ),
        'edit_item'             => __( 'Kitabı düzenle', 'textdomain' ),
        'view_item'             => __( 'Kitabı görüntüle', 'textdomain' ),
        'all_items'             => __( 'Bütün Kitaplar', 'textdomain' ),
        'search_items'          => __( 'Kitap ara', 'textdomain' ),
        'parent_item_colon'     => __( 'Üst Kitaplar:', 'textdomain' ),
        'not_found'             => __( 'Hiç kitap bulunamadı.', 'textdomain' ),
        'not_found_in_trash'    => __( 'Çöpte hiç kitap bulunamadı.', 'textdomain' ),
        'featured_image'        => __( 'Kitap kapağı resmi', 'textdomain' ),
        'set_featured_image'    => __( 'Kapak resmi gir', 'textdomain' ),
        'remove_featured_image' => __( 'Kapak resmini kaldır', 'textdomain' ),
        'use_featured_image'    => __( 'Kapak resmi olarak kullan', 'textdomain' ),
        'archives'              => __( 'Kitap arşivi', 'textdomain' ),
        'insert_into_item'      => __( 'Kitaba ekle', 'textdomain' ),
        'uploaded_to_this_item' => __( 'Bu kitaba yükle', 'textdomain' ),
        'filter_items_list'     => __( 'Kitap listesini filtrele', 'textdomain' ),
        'items_list_navigation' => __( 'Kitap listesinde dolaş', 'textdomain' ),
        'items_list'            => __( 'Kitap listesi', 'textdomain' ),
    );
 
    $argumanlar = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'kitap' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'show_in_rest'      => true,
        'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
    );
 
    register_post_type( 'kitap', $argumanlar );

}
 
add_action( 'init', 'ilktemam_kitap_tipi_icerik_ekle' );

DERSİN SONU

Kimya Özel Dersi Al

Yorum yaparak bize destek olabilirsiniz.

6 yorum “Register_post_type()”

  • Yazılarınız çok güzel bir anlatımla hazırlanmış ve eşsiz bir kaynak.
    Bir sorum olacak; yukarıdaki örneği aynen uygulamama rağmen admin sayfasında Görünüm > menüler bölümünde, “Menü Öğeleri ekle” kısmında kitaplar öğesi yer almıyor. Yazılar, Sayfalar, Özel bağlantılar ve kategoriler mevcut ancak kitaplar öğesi yok. Nerede hata yapıyorum acaba.

  • Şimdi farkettim Ekran Tercihlerinde “Kitaplar” onay kutusu seçili değilmiş. Bu bölüm kodla varsayılan olarak seçili gelmiyor mu acaba. Aradım bulamadım da başka makalelerde.

  • Tamam sorun bendeymiş. Sanırım kapatmışım kendim ve unutmuşum 🙂 Aynı kodlarla başka post tip ekledim onda açık geldi.

    • Gökalp AY says:

      Öncelikle teşekkür ederim yorumlarınız ve güzel sözleriniz için. Sorununuzu halletmenize sevindim :). Yardımcı olabileceğim başka bir konu varsa çekinmeden yazın lütfen. Mümkün olan en kısa süre içerisinde ciddi bir cevap alacağınızı söyleyebilirim.

    • Gökalp AY says:

      Teşekkür ederim, yorumlarınız motive edici. Fırsat buldukça paylaşmak istiyorum. WordPress konusu, tam bir derya, açıkçası neresini yazacağımı şaşırıyorum. Mesela son aylarda Gutenberg blok geliştirme üzerine yoğunlaştım ve biliyorum ki bu konuda da Türkçe kaynak çok eksik. Keşke öğrendiklerimi yazabilecek fırsat bulabilsem.

Bir cevap yazın

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

Şu kadar HTML serbest:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>