Merhabalar. Bu yazımızda wordpress yazılar özelliğini kullanarak yeni ve özel bir yazı türü nasıl oluşturabiliriz buna değinmek istiyorum. Özel yazı türü derken ne demek istediğimi ufacık açıklayayım. Diyelim ki sitenizde bir filmler kategorisi oluşturdunuz ve filmleri standart bir düzende kaydetmek istiyorsunuz. Her film için ortak olan özellikleri bir kayıt formu şeklinde kaydetmek ve kullanıcılara da belli bir düzen içinde göstermek istiyorsunuz.
Daha anlaşılır olması için bir görsel ile açıklayalım :
Bu şekilde hem kaydetme işlemini daha kolay bir hale getirebilir, hemde kullanıcı tarafında düzgün bir görünüm oluşturabilirsiniz. Peki bu wordpress özel yazı türlerini nasıl ekleyebiliriz? şimdi buna bakalım.
Öncelikle aşağıdaki kodu temamızın functions.php dosyasına ekliyoruz.
function custom_post_type() { // Set UI labels for Custom Post Type $labels = array( 'name' => _x( 'Filmler', 'Post Type General Name', 'batuhanozyavru.com.tr.tr' ), 'singular_name' => _x( 'Film', 'Post Type Singular Name', 'batuhanozyavru.com.tr.tr' ), 'menu_name' => __( 'Filmler', 'batuhanozyavru.com.tr.tr' ), 'parent_item_colon' => __( 'Ebeveyn Film', 'batuhanozyavru.com.tr.tr' ), 'all_items' => __( 'Tüm Filmler', 'batuhanozyavru.com.tr.tr' ), 'view_item' => __( 'Filmi Gör', 'batuhanozyavru.com.tr.tr' ), 'add_new_item' => __( 'Yeni Film Ekle', 'batuhanozyavru.com.tr.tr' ), 'add_new' => __( 'Yeni Ekle', 'batuhanozyavru.com.tr.tr' ), 'edit_item' => __( 'Filmi Düzenle', 'batuhanozyavru.com.tr.tr' ), 'update_item' => __( 'Filmi Güncelle', 'batuhanozyavru.com.tr.tr' ), 'search_items' => __( 'Film Ara', 'batuhanozyavru.com.tr.tr' ), 'not_found' => __( 'Bulunamadı', 'batuhanozyavru.com.tr.tr' ), 'not_found_in_trash' => __( 'Silinenler Arasında Bulunamadı', 'batuhanozyavru.com.tr.tr' ), ); // Set other options for Custom Post Type $args = array( 'label' => __( 'filmler', 'twentythirteen' ), 'description' => __( 'Film yazı dizinizi oluşturun', 'batuhanozyavru.com.tr.tr' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'page', // This is where we add taxonomies to our CPT 'taxonomies' => array( 'category' ), ); // Registering your Custom Post Type register_post_type( 'filmler', $args ); } /* Hook into the 'init' action so that the function * Containing our post type registration is not * unnecessarily executed. */ add_action( 'init', 'custom_post_type', 0 ); add_filter('pre_get_posts', 'query_post_type'); function query_post_type($query) { if( is_category() ) { $post_type = get_query_var('post_type'); if($post_type) $post_type = $post_type; else $post_type = array('nav_menu_item', 'post', 'filmler'); // don't forget nav_menu_item to allow menus to work! $query->set('post_type',$post_type); return $query; } }
Kodu eklediğimiz zaman ilk görselde olduğu gibi yeni özel bir yazı alanın oluştuğunu göreceksiniz. Ancak yeni film ekle dediğimizde film özelliklerine ait form henüz yok. Eklediğimiz bu kod ile sadece özel bir yazı alanı oluşturduk. Şimdi gelelim film özelliklerini kaydedeceğimiz özel bir form oluşturup , bu form ile özel yazı alanımızı ilişkilendirmeye..
Ben bu işlem için bir eklenti kullanmayı tercih ediyorum. Eklenti sayesinde özel alanları daha kolay oluşturup ilişkilendirmek mümkün.
Kullanacağımız eklentinin adı, wordpress advanced custom fields (wordpress gelişmiş özel alanlar)
Eklentiyi indirmek için tıklayın:
İndir: Advanced Custom Fields (Gelişmiş Özel Alanlar)
Eklenti ile ilgili detaylı bilgi ve açıklama için tıklayın:
Advanced Custom Fields for WordPress Developers.
Eklentiyi kurup aktif ettikten sonra Admin Panel menümüzde Özel Alanlar diye bir bölüm oluşacaktır. Bu kısımdan Yeni Ekle diyerek ilgili formumuzu oluşturuyoruz. Ben örnekte verdiğimiz gibi film alanları için oluşturduğum formu sizlerle paylaşacağım. Siz bu örnekten yola çıkarak kendi ihtiyaçlarınıza özel bir form oluşturabilirsiniz.
Alan grubumuza bir isim verdikten sonra +Alan Ekle butonuna tıklıyoruz ve kullanacağımız alanları oluşturuyoruz.
Alan Adı kısmına yazacağımız bilgiyi daha sonra frontend kısımda kullanıcılara veri gösterirken kullanacağız. Bu bilgi bize lazım olacağından sadece ve anlaşılır terimler seçmenizi öneririm.
Alan Tipi kısmından ise veriyi ne şekilde kaydedeceğimizi seçiyoruz. Metin, checkbox (seçim kutusu) veya hangisini isterseniz. Diğer kısımlarıda kendinize göre özelleştirebilirsiniz.
Tüm alanlarımızı oluşturup formumuzu hazır hale getirdikten sonra görüntü şu şekilde olacaktır:
Formumuz hazır hale geldiğine göre şimdi yazının başında oluşturduğumuz filmler adındaki özel yazı türümüz ile ilişkilendirebiliriz. Kurallar kısmında bulunan kural grupları ile bu işlemi halledebiliriz. Kural grubu olarak Yazı Türü, kural olarak eşitse ve karşılık olarak ise filmler ‘i seçiyoruz. Biz özel bir yazı türü oluşturduğumuz için bu işlemi yaptık. Ancak eklentinin farklı bölümler ile ilişkilendirilmesi de mümkün. Örneğin sayfalar, kategoriler veya taksonomiler ile ilişkilendirerek farklı amaçlar içinde kullanabilirsiniz.
Artık Filmler adında bir kayıt alanımız bulunmakta. Filmler için oluşturduğumuz özel alanlarımız kullanıma hazır duruma geldi. Şimdi ise bu bilgileri kullanıcılara nasıl göstereceğiz buna bakalım.
Temamızın single.php dosyasını açıyoruz. Bunun sebebi oluşturduğumuz firmalar kayıt biçiminin yazılardan miras alıyor olması. Özel alanlar formumuzu da firmalarla ilişkilendirdiğimiz için haliyle gösterilecek sayfa da single.php sayfası olacak.
single.php wordpress’in kendi özelliği olan yazılar kısmına eklediğimiz yazıları da göstereceği için bilgileri if else ile kontrol ediyoruz. eğer boş ise göstermesin ki yazılar içinde anlamsız görüntüler oluşmasın.
<?php if( get_field('film_adi') != null ) : ?> <div class="film-detay-satir"> <span class="firma-detay"><?php the_field('film_adi') ?></span> </div> <?php endif; ?>
Bu kodu single.php dosyasında görünmesini istediğimiz yere ekliyoruz. the_field(‘film_adi’) bu kısıma dikkat ederseniz, özel alan oluştururken Alan Adı kısmında verdiğimiz değer olduğunu anlayacaksınız. Diğer tüm alanları da bu şekilde alan adı bilgisini değiştirerek ekliyoruz. ilk satırda bulunan if içinde de aynı değer ile kontrol ettiğimize dikkatinizi çekmek istiyorum.
<?php if( get_field('tur') != null ) : ?> <div class="film-detay-satir"> <span class="firma-detay"><?php the_field('tur') ?></span> </div> <?php endif; ?> <?php if( get_field('sure') != null ) : ?> <div class="film-detay-satir"> <span class="firma-detay"><?php the_field('sure') ?></span> </div> <?php endif; ?> <?php if( get_field('yonetmen') != null ) : ?> <div class="film-detay-satir"> <span class="firma-detay"><?php the_field('yonetmen') ?></span> </div> <?php endif; ?> <?php if( get_field('oyuncular') != null ) : ?> <div class="film-detay-satir"> <span class="firma-detay"><?php the_field('oyuncular') ?></span> </div> <?php endif; ?>
Böylelikle bu özel alanları kullanıcılara göstermiş olduk.
Umarım faydalı bir yazı olmuştur. Yeniden görüşmek üzere hoşçakalın.