Ön Hazırlık ve Gereksinimler
Projeye başlamadan önce, WordPress geliştirme ortamınızın hazır olduğundan emin olmalısınız. En az PHP 8.2 veya üzeri bir sürüm kullanmanız, güvenlik ve performans açısından kritik öneme sahiptir. Ayrıca, kodlarınızı doğrudan canlı sitenizde değil, bir yerel geliştirme ortamında (LocalWP veya XAMPP gibi) test etmeniz önerilir.
- Aktif bir WordPress kurulumu.
- Temanızın
functions.phpdosyasına erişim. - Temel düzeyde PHP ve WordPress hiyerarşisi bilgisi.
- Kod düzenlemek için bir metin editörü (VS Code gibi).
Kritik Uyarı: Kod değişiklikleri yapmadan önce mutlaka veritabanı ve dosya yedeği alın. Hatalı bir PHP kodu, sitenizin "Beyaz Ekran" (White Screen of Death) hatası vermesine neden olabilir.
Adım 1: Custom Post Type Kaydını Oluşturma
WordPress'te özel bir yazı tipi oluşturmak için register_post_type() fonksiyonunu kullanırız. Bu işlem, WordPress'in yönetim panelinde "Portfolyo" adında yeni bir menü öğesi oluşturmamızı sağlar. Bu kodu temanızın functions.php dosyasına eklemelisiniz.
function ozel_portfolyo_post_type() {
$args = array(
'public' => true,
'label' => 'Portfolyo',
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
'has_archive' => true,
'rewrite' => array('slug' => 'projeler'),
'show_in_rest' => true, // Gutenberg editör desteği için
);
register_post_type('portfolyo', $args);
}
add_action('init', 'ozel_portfolyo_post_type');
Yukarıdaki kod, 'portfolyo' adında bir içerik türü tanımlar. show_in_rest parametresi, modern blok editörü (Gutenberg) ile uyumlu çalışması için gereklidir. Kodu ekledikten sonra WordPress yönetici panelinde "Portfolyo" sekmesinin belirdiğini görmelisiniz.
Adım 2: Portfolyo İçin Özel Taksonomi (Kategoriler) Ekleme
Projelerinizi "Web Tasarım", "Mobil Uygulama" gibi kategorilere ayırmak için özel taksonomilere ihtiyacınız vardır. Bu, kullanıcıların projelerinizi filtrelemesini kolaylaştırır.
function portfolyo_taksonomi_olustur() {
register_taxonomy('proje_kategori', 'portfolyo', array(
'label' => 'Proje Kategorileri',
'rewrite' => array('slug' => 'proje-kategori'),
'hierarchical' => true,
'show_in_rest' => true,
));
}
add_action('init', 'portfolyo_taksonomi_olustur');
Bu kod bloğu, portfolyo yazı tipinize bağlı çalışan, hiyerarşik bir kategori yapısı oluşturur. hierarchical => true parametresi, kategorilerin standart WordPress kategorileri gibi davranmasını sağlar.
Adım 3: Portfolyo Sayfası İçin Şablon Dosyası Oluşturma
WordPress, özel yazı tiplerini görüntülemek için belirli bir dosya isimlendirme hiyerarşisi kullanır. Portfolyo öğelerinizin listelendiği bir sayfa için archive-portfolyo.php, tekil projeler için ise single-portfolyo.php dosyalarını temanızın ana dizinine oluşturmalısınız.
// single-portfolyo.php dosyası örneği
get_header();
if (have_posts()) : while (have_posts()) : the_post();
echo '' . get_the_title() . '
';
echo '' . the_content() . '';
endwhile; endif;
get_footer();
Bu basit şablon, portfolyo öğelerinizin tekil sayfalarını görüntüler. get_header() ve get_footer() fonksiyonları, temanızın genel tasarımını bu sayfaya dahil eder.
Adım 4: Portfolyo İçin Meta Kutuları (Ekstra Alanlar) Ekleme
Proje yılı, müşteri adı veya canlı demo linki gibi verileri tutmak için meta kutularına ihtiyaç duyarsınız. Bunun için add_meta_box() fonksiyonunu kullanırız.
function portfolyo_meta_kutusu() {
add_meta_box('proje_detaylari', 'Proje Detayları', 'proje_meta_callback', 'portfolyo', 'side');
}
add_action('add_meta_boxes', 'portfolyo_meta_kutusu');
function proje_meta_callback($post) {
$value = get_post_meta($post->ID, '_proje_linki', true);
echo '';
}
Burada esc_url() kullanarak, veritabanına kaydedilen URL'lerin güvenli olmasını sağlıyoruz. XSS saldırılarına karşı verileri her zaman çıkış yaparken temizlemek (sanitizing/escaping) hayati önem taşır.
Karşılaştırma: Eklenti vs. Manuel Kodlama
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| Manuel Kod | Hızlı, hafif, bağımlılık yok | PHP bilgisi gerektirir |
| Eklenti (CPT UI) | Kod yazmadan kolay kurulum | Ek yük, güvenlik riski |
Adım 5: Portfolyo Listeleme Sorgusu (WP_Query)
Ana sayfanızda veya özel bir sayfada portfolyo öğelerini listelemek için WP_Query sınıfını kullanırız. Bu, veritabanından özel içeriklerinizi çekmenizi sağlar.
$args = array(
'post_type' => 'portfolyo',
'posts_per_page' => 6
);
$portfolyo_sorgu = new WP_Query($args);
if ($portfolyo_sorgu->have_posts()) :
while ($portfolyo_sorgu->have_posts()) : $portfolyo_sorgu->the_post();
echo '
'.get_the_title().'
';
endwhile;
wp_reset_postdata();
endif;
wp_reset_postdata() fonksiyonunu kullanmayı asla unutmayın. Bu, ana sorgunun bozulmamasını ve diğer eklentilerin düzgün çalışmasını sağlar.
Güvenlik Sorumluluk Reddi: Bu rehberdeki kodlar eğitim amaçlıdır. Canlı sitelerde kullanırken tüm girdi verilerinisanitize_text_field()ile filtreleyin vewp_noncekullanarak form güvenliğini sağlayın. SQL injection riskine karşı her zaman$wpdb->prepare()kullanın.
Sıkça Sorulan Sorular
Custom Post Type neden normal sayfalardan daha iyidir?
Normal sayfalar, içerik türlerini birbirinden ayırmanıza izin vermez. Custom Post Type, portfolyo öğelerini blog yazılarından teknik olarak ayırarak daha temiz bir veritabanı yapısı ve daha iyi bir yönetim paneli deneyimi sunar.
Özel yazı tipim görünmüyor, ne yapmalıyım?
Kodunuzu ekledikten sonra WordPress "Kalıcı Bağlantılar" (Permalinks) ayarlarını ziyaret edin ve "Değişiklikleri Kaydet" butonuna basın. Bu, yeni oluşturulan yazı türünün URL yapısını (rewrite rules) günceller.
Gutenberg editörünü nasıl aktif ederim?
register_post_type fonksiyonu içerisindeki 'show_in_rest' => true parametresini eklediğinizden emin olun. Bu, WordPress'in modern blok tabanlı editörünü aktif eder.
Portfolyo öğelerim için özel bir kategori yapısı kurabilir miyim?
Evet, register_taxonomy fonksiyonu ile portfolyo türünüze özel etiketler veya kategoriler tanımlayabilirsiniz.
Temamı değiştirdiğimde portfolyolarım silinir mi?
Hayır, Custom Post Type verileri veritabanında saklanır. Ancak, kodları temanın functions.php dosyasından yeni temaya taşımanız gerekir. Bu nedenle, bu tür fonksiyonları bir "Site Özellikleri" eklentisi içinde tutmak daha profesyonel bir yaklaşımdır.
Portfolyo Sayfalarında Performans Optimizasyonu
Özel yazı tipleri (CPT) ile oluşturulan portfolyo sayfaları, özellikle yüksek çözünürlüklü görseller içerdiğinde sitenizin yüklenme süresini olumsuz etkileyebilir. WordPress'in standart sorgu yapısı, veritabanı üzerinde yük oluşturabilir. Performansı artırmak için sorgularınızı optimize etmeli ve nesne önbellekleme (object caching) kullanmalısınız.
Özellikle WP_Query kullanırken gereksiz verileri çekmemek için no_found_rows parametresini true olarak ayarlamak, sayfalama (pagination) ihtiyacınız yoksa veritabanı sorgusunu ciddi oranda hızlandırır.
$args = array(
'post_type' => 'portfolyo',
'posts_per_page' => 6,
'no_found_rows' => true, // Sayfalama yoksa performansı artırır
'update_post_meta_cache' => false, // Meta verilerine ihtiyaç yoksa kapatın
'update_post_term_cache' => false // Taksonomi verilerine ihtiyaç yoksa kapatın
);
$portfolio_query = new WP_Query($args);
Gelişmiş Hata Ayıklama ve Sorgu İzleme
Portfolyo şablonlarınızda beklediğiniz veriler görüntülenmiyorsa veya 404 hataları alıyorsanız, WordPress'in sorgu yapısını incelemeniz gerekir. En sık karşılaşılan sorun, CPT kayıt edildikten sonra "Kalıcı Bağlantılar" (Permalinks) ayarlarının güncellenmemesidir. Bu durumu kod ile otomatik tetiklemek veya manuel olarak panelden "Kaydet" butonuna basmak sorunu çözer.
Sorgu hatalarını ayıklamak için pre_get_posts filtresini kullanarak ana sorguyu değiştirmeyi deneyebilirsiniz. Bu yöntem, özel şablon dosyaları oluşturmadan arşiv sayfalarını yönetmenize olanak tanır.
function custom_portfolio_archive_query( $query ) {
if ( !is_admin() && $query->is_main_query() && is_post_type_archive('portfolyo') ) {
$query->set( 'posts_per_page', 12 );
$query->set( 'orderby', 'date' );
$query->set( 'order', 'DESC' );
}
}
add_action( 'pre_get_posts', 'custom_portfolio_archive_query' );
Yaygın Hata Senaryoları ve Çözümleri
| Hata Durumu | Olası Neden | Çözüm |
|---|---|---|
| Portfolyo linkleri 404 veriyor | Permalinks güncellenmemiş | Ayarlar > Kalıcı Bağlantılar > Kaydet |
| Görseller görünmüyor | Öne çıkan görsel desteği eksik | add_theme_support('post-thumbnails') kontrolü |
| Sorgu boş dönüyor | Yanlış post_type ismi | register_post_type içindeki 'slug' değerini kontrol et |
İpucu: Geliştirme aşamasındaWP_DEBUGmodunuwp-config.phpdosyanızda aktif ederek, kodlarınızdaki olası hataları anlık olarak görebilir ve çok daha hızlı çözüm üretebilirsiniz.
Sonuç
WordPress ile Custom Post Type kullanarak bir portfolyo sayfası oluşturmak, sitenizin içerik yönetimini profesyonel bir seviyeye taşır. Bu rehberde öğrendiğiniz adımları takip ederek, kendi özelleştirilmiş içerik türlerinizi oluşturabilir, kategorize edebilir ve temanızın tasarımına entegre edebilirsiniz. Bir sonraki adım olarak, bu portfolyo öğelerini daha etkileşimli hale getirmek için Advanced Custom Fields (ACF) eklentisini inceleyebilir veya REST API ile projelerinizi farklı platformlarda sergilemeyi deneyebilirsiniz.


Yorumlar (0)
Yorum Yaz