Gereksinimler ve Ön Hazırlık
Özel menü alanı tanımlamaya başlamadan önce çalışma ortamınızın hazır olduğundan emin olmalısınız. WordPress'in güncel sürümleri, menü yönetimi için oldukça esnek API'ler sunar. Çalışmalarınızı doğrudan canlı sunucuda yapmak yerine, yerel bir geliştirme ortamında (LocalWP veya XAMPP gibi) test etmeniz güvenlik açısından önerilir.
- WordPress'in güncel bir sürümü (Önerilen: 6.x ve üzeri).
- Temanızın
functions.phpdosyasına erişim sağlayan bir kod editörü (VS Code gibi). - FTP/SFTP erişimi veya sitenizin dosya yöneticisi.
- Temel PHP bilgisi.
Kritik Uyarı: functions.php dosyasında yapacağınız hatalı bir kod, sitenizin "Beyaz Ekran" (White Screen of Death) hatası vermesine neden olabilir. Kodları eklemeden önce mutlaka dosyanın yedeğini alın.
Adım 1: functions.php Dosyasında Menü Kaydı Oluşturma
WordPress'e yeni bir menü alanı tanıtmak için register_nav_menus() fonksiyonunu kullanırız. Bu fonksiyon, temanızın "Görünüm > Menüler" kısmında yeni bir konum belirlemesini sağlar. İlk olarak, temanızın functions.php dosyasını açın ve aşağıdaki kod bloğunu ekleyin.
// Özel menü alanlarını kaydetme fonksiyonu
function temam_ozel_menuleri_tanimla() {
register_nav_menus( array(
'ust-ana-menu' => __( 'Üst Ana Menü', 'temam-textdomain' ),
'footer-hizli-erisim' => __( 'Footer Hızlı Erişim', 'temam-textdomain' ),
) );
}
add_action( 'after_setup_theme', 'temam_ozel_menuleri_tanimla' );
Bu kod, after_setup_theme kancasını (hook) kullanarak WordPress yüklendiğinde menülerimizi sisteme tanıtır. register_nav_menus içerisindeki dizi, menü ID'sini (anahtar) ve yönetim panelinde görünecek etiketi (değer) tutar.
Adım 2: Yönetim Panelinde Menüleri Yapılandırma
Kodunuzu kaydedip sunucuya yükledikten sonra, WordPress yönetim panelinde "Görünüm > Menüler" sekmesine gidin. "Menü Konumları" kısmında oluşturduğunuz "Üst Ana Menü" ve "Footer Hızlı Erişim" seçeneklerinin göründüğünü teyit edin. Buradan yeni bir menü oluşturup, bu konumlara atayabilirsiniz.
Menülerinizi oluştururken "Görüntüleme Konumları" kısmından ilgili alanı seçmeyi unutmayın. Eğer bu adımı atlarsanız, ön yüzde menülerinizi çağırsanız bile içerik boş dönecektir.
Adım 3: Menüleri Şablona (Template) Ekleme
Menü alanlarını tanımladık ve panelden atamalarını yaptık. Şimdi sıra bu menüleri temanın ön yüzünde göstermeye geldi. Bunun için wp_nav_menu() fonksiyonunu kullanacağız. Menüyü göstermek istediğiniz dosyaya (örneğin header.php veya footer.php) aşağıdaki kodu yerleştirin.
// Header dosyasında menüyü çağırma
wp_nav_menu( array(
'theme_location' => 'ust-ana-menu',
'container' => 'nav',
'container_class'=> 'ana-menu-konteyner',
'menu_class' => 'menu-liste-stili',
'fallback_cb' => false,
) );
Burada theme_location parametresi, 1. adımda tanımladığımız ID ile eşleşmelidir. container parametresi, menünün etrafına sarılacak HTML etiketini belirler. fallback_cb parametresini false yaparak, menü atanmadığında WordPress'in otomatik olarak tüm sayfaları listelemesini engellemiş olursunuz.
Adım 4: Menüleri CSS ile Özelleştirme
WordPress, menüleri oluştururken otomatik olarak CSS sınıfları (class) ekler. Menünüzü stilize etmek için bu sınıfları kullanabilirsiniz. Örneğin, .ana-menu-konteyner sınıfını kullanarak menünüzü yatay veya dikey olarak hizalayabilirsiniz.
/* style.css dosyasına eklenecek örnek */
.ana-menu-konteyner ul {
list-style: none;
display: flex;
gap: 20px;
}
.ana-menu-konteyner ul li a {
text-decoration: none;
color: #333;
font-weight: bold;
}
CSS kullanırken, tarayıcı uyumluluğu için flexbox veya grid yapılarını tercih etmeniz modern web standartları için en iyi pratiktir.
Adım 5: Gelişmiş Menü Yönetimi ve Güvenlik
Menülerinize özel nitelikler eklemek veya HTML yapısını tamamen değiştirmek isterseniz Walker_Nav_Menu sınıfını genişletebilirsiniz. Ancak basit projeler için yukarıdaki yöntem yeterlidir. Güvenlik açısından, menü linklerini her zaman WordPress'in kendi fonksiyonları ile (esc_url() gibi) çıktılamaya dikkat edin.
// Menü öğelerini filtreleyerek güvenlik sağlama örneği
add_filter( 'nav_menu_link_attributes', 'ozel_menu_nitelikleri', 10, 3 );
function ozel_menu_nitelikleri( $atts, $item, $args ) {
$atts['class'] = 'menü-link-sinifi';
return $atts;
}
Bu filtre, tüm menü öğelerine otomatik olarak bir sınıf ekler. add_filter kullanımı, temanızın çekirdek dosyalarına dokunmadan menü yapısını manipüle etmenizi sağlar.
Karşılaştırma: Menü Ekleme Yöntemleri
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| functions.php (register_nav_menus) | Tam kontrol ve performans | Kod bilgisi gerektirir |
| Gutenberg Navigasyon Bloğu | Sürükle bırak kolaylığı | Özel tasarımlarda kısıtlı |
| Eklenti Kullanımı | Hızlı çözüm | Siteyi yavaşlatabilir |
Güvenlik Sorumluluk Reddi: Bu makalede paylaşılan kodlar, standart WordPress kurulumları için güvenli kabul edilir. Ancak, functions.php dosyanıza ekleyeceğiniz üçüncü taraf kodların XSS veya SQL injection riskleri taşıyabileceğini unutmayın. Her zaman güvenilir kaynaklardan kod alın ve üretim ortamına almadan önce test edin.
Sıkça Sorulan Sorular
Menü tanımladım ama yönetim panelinde görünmüyor, neden?
Kodunuzu functions.php dosyasına doğru eklediğinizden ve add_action kancasını kullandığınızdan emin olun. Ayrıca dosyanın kaydedildiğini ve sunucuda güncellendiğini kontrol edin.
Menüde sadece sayfalar görünüyor, özel link ekleyebilir miyim?
Evet, "Görünüm > Menüler" panelinden "Özel Bağlantılar" kısmını kullanarak istediğiniz URL'yi menüye ekleyebilirsiniz. Bu, tanımladığınız özel alanlarda da kusursuz çalışır.
Birden fazla menü alanı aynı anda kullanılabilir mi?
Elbette, register_nav_menus fonksiyonu içerisinde diziye yeni elemanlar ekleyerek sınırsız sayıda menü alanı tanımlayabilirsiniz.
Mobil menü için ekstra bir şey yapmam gerekir mi?
Bu rehber menü alanını tanımlamayı öğretir. Mobil menü (hamburger menü) için genellikle JavaScript (veya jQuery) ile bir "toggle" fonksiyonu yazmanız ve CSS ile mobil görünümü gizleyip göstermeniz gerekir.
Menü öğelerine ikon nasıl eklerim?
Menü öğelerine ikon eklemek için "Görünüm > Menüler" kısmında ekranın sağ üstündeki "Ekran Tercihleri"nden "CSS Sınıfları"nı aktif edebilir veya özel bir eklenti kullanabilirsiniz.
Menü Yapılarında Performans Optimizasyonu
WordPress menüleri, veritabanından çekilen karmaşık nesnelerdir. Özellikle çok sayıda öğeye sahip menülerde, her sayfa yüklemesinde veritabanı sorgusu yapmak performansı olumsuz etkileyebilir. WordPress'in sunduğu Transient API kullanarak menü çıktısını önbelleğe almak, sitenizin hızını ciddi oranda artıracaktır.
Aşağıdaki kod örneği, menü çıktısını 12 saat boyunca önbellekte tutarak veritabanı yükünü minimize eder:
function get_cached_nav_menu($theme_location) {
$cache_key = 'menu_cache_' . $theme_location;
$menu_output = get_transient($cache_key);
if (false === $menu_output) {
$menu_output = wp_nav_menu(array(
'theme_location' => $theme_location,
'echo' => false,
));
set_transient($cache_key, $menu_output, 12 * HOUR_IN_SECONDS);
}
return $menu_output;
}
// Kullanımı: echo get_cached_nav_menu('primary-menu');
Menü Öğelerine Dinamik Veri Enjeksiyonu
Bazen menü öğelerinin yanına dinamik bilgiler (örneğin; alışveriş sepetindeki ürün sayısı veya kullanıcı bildirimleri) eklemek isteyebilirsiniz. Bunun için walker_nav_menu_start_el filtresini kullanarak menü öğesi oluşturulurken araya kendi HTML kodumuzu enjekte edebiliriz.
Aşağıdaki örnek, "Hesabım" menü öğesinin yanına dinamik bir rozet eklemektedir:
add_filter('walker_nav_menu_start_el', 'add_dynamic_badge_to_menu', 10, 4);
function add_dynamic_badge_to_menu($item_output, $item, $depth, $args) {
// Sadece belirli bir CSS sınıfına sahip öğelere ekle
if (in_array('menu-item-notifications', $item->classes)) {
$badge = '3';
$item_output = str_replace('', $badge . '', $item_output);
}
return $item_output;
}
Menü Hata Ayıklama ve Sorun Giderme
Menülerin beklediğiniz gibi görünmemesi durumunda izlemeniz gereken hata ayıklama adımları şunlardır:
- Konum Kontrolü:
has_nav_menu('konum-adi')fonksiyonu ile menünün o konuma atanıp atanmadığını kontrol edin. - CSS Çakışmaları: Tarayıcı geliştirici araçlarını (F12) kullanarak menü öğelerinin
display: noneveyavisibility: hiddendurumunda olup olmadığını inceleyin. - Walker Hataları: Eğer özel bir
Walker_Nav_Menusınıfı kullanıyorsanız, sınıfın doğru şekilde tanımlandığından vewp_nav_menuiçinde'walker' => new My_Custom_Walker()parametresi ile çağrıldığından emin olun. - PHP Hataları:
wp-config.phpdosyasındaWP_DEBUGmodunutrueyaparak gizli PHP uyarılarını görünür kılın.
| Hata Türü | Olası Neden | Çözüm |
|---|---|---|
| Menü boş görünüyor | Konum atanmamış | Görünüm > Menüler > Konumları Yönet |
| CSS stilleri uygulanmıyor | Yanlış CSS seçicisi | Tarayıcı konsolundan class isimlerini doğrulayın |
| Menü öğeleri alt alta geliyor | Float veya Flex eksikliği | Kapsayıcı öğeye display: flex ekleyin |
Sonuç
WordPress ile özel menü alanı tanımlama, sitenizin kullanıcı deneyimini ve yönetim kolaylığını artıran temel bir beceridir. Bu rehberde öğrendiğiniz register_nav_menus ve wp_nav_menu fonksiyonları, profesyonel WordPress tema geliştiriciliğinin yapı taşlarıdır. Şimdi bu bilgileri kendi temanızda uygulayarak, sitenizin navigasyon yapısını tamamen özelleştirebilirsiniz. Bir sonraki adım olarak, menülerinize "Mega Menü" özellikleri eklemek için CSS Grid yapısını inceleyebilirsiniz.


Yorumlar (0)
Yorum Yaz