Yazıya Özel Sidebar Atama: functions.php ile

WordPress ile çalışırken er ya da geç şu soruyla yüzleşiyorsunuz: “Bu sayfada farklı bir sidebar göstermem gerekiyor, ama tema bunu desteklemiyor.” İşte tam bu noktada functions.php devreye giriyor. Yazıya özel sidebar atama, aslında çok basit bir konsept; ama doğru yapılandırılmadığında tema güncellemelerinde kaybolan, bakımı zorlaşan bir kaosa dönüşebilir. Bu yazıda konuyu hem teorik hem pratik açıdan ele alıyoruz.

Sidebar Nedir ve Neden Özelleştirme Gerekir?

WordPress’te sidebar, teknik olarak bir “widget area” yani widget alanıdır. Tema dosyalarında dynamic_sidebar() fonksiyonu ile çağrılır. Varsayılan olarak çoğu tema tek bir sidebar kullanır ve bu sidebar’ı tüm sayfalarda gösterir.

Gerçek dünyada ise durum çok farklı:

  • Blog yazıları için “Son Yazılar” ve “Kategoriler” widget’larını içeren bir sidebar istiyorsunuz
  • Ürün sayfaları için filtre widget’larının olduğu ayrı bir sidebar lazım
  • İletişim sayfasında sidebar hiç olmamalı
  • Landing page’lerde sidebar yerine özel bir çağrı-eylem kutusu göstermek istiyorsunuz

Bu ihtiyaçları karşılamanın en temiz yolu functions.php üzerinden yeni widget alanları kaydedip, bunları koşullu olarak doğru yerlerde çağırmaktır.

functions.php’ye Müdahale Ederken Dikkat Edilecekler

Doğrudan aktif temanızın functions.php dosyasını düzenlemek bir kötü pratiktir. Tema güncellendiğinde tüm değişiklikleriniz gider. Bunun yerine:

  • Child tema kullanın: Aktif temanızın child temasını oluşturun ve değişiklikleri oraya yazın
  • Custom plugin yaklaşımı: Site işlevselliğini bir mu-plugin veya özel plugin olarak geliştirin
  • Code Snippets eklentisi: Küçük kod parçaları için pratik bir alternatif

Bu yazıdaki tüm kodlar child tema functions.php‘sine veya bir özel plugin dosyasına eklenebilir.

Adım 1: Yeni Sidebar’ları Kaydetmek

İlk adım register_sidebar() fonksiyonu ile yeni widget alanlarını WordPress’e tanıtmaktır.

<?php
// functions.php - Yeni sidebar'ları kaydet

function benim_sitemi_sidebar_kaydet() {

    // Blog yazıları için özel sidebar
    register_sidebar( array(
        'name'          => 'Blog Yazıları Sidebar',
        'id'            => 'blog-yazi-sidebar',
        'description'   => 'Yalnızca blog yazılarında görünen widget alanı',
        'before_widget' => '<div id="%1$s" class="widget %2$s">',
        'after_widget'  => '</div>',
        'before_title'  => '<h3 class="widget-title">',
        'after_title'   => '</h3>',
    ));

    // WooCommerce ürün sayfaları için sidebar
    register_sidebar( array(
        'name'          => 'Ürün Detay Sidebar',
        'id'            => 'urun-detay-sidebar',
        'description'   => 'Ürün sayfalarında görünen filtre ve öneri alanı',
        'before_widget' => '<div id="%1$s" class="widget urun-widget %2$s">',
        'after_widget'  => '</div>',
        'before_title'  => '<h3 class="widget-title urun-title">',
        'after_title'   => '</h3>',
    ));

    // İletişim ve hakkımızda sayfaları için dar sidebar
    register_sidebar( array(
        'name'          => 'Kurumsal Sidebar',
        'id'            => 'kurumsal-sidebar',
        'description'   => 'İletişim ve kurumsal sayfalarda kullanılır',
        'before_widget' => '<div id="%1$s" class="widget kurumsal-widget %2$s">',
        'after_widget'  => '</div>',
        'before_title'  => '<h4 class="widget-baslik">',
        'after_title'   => '</h4>',
    ));

}
add_action( 'widgets_init', 'benim_sitemi_sidebar_kaydet' );

Bu kod çalıştıktan sonra WordPress yönetim panelinde Görünüm > Widget’lar bölümünde üç yeni widget alanı göreceksiniz.

Adım 2: Koşullu Sidebar Gösterimi için Yardımcı Fonksiyon

Temanın sidebar dosyasına (genellikle sidebar.php) koşul eklemek yerine, bir yardımcı fonksiyon yazarak hangi sidebar’ın görüneceğini merkezi olarak yönetelim.

<?php
// functions.php - Aktif sidebar ID'sini döndüren fonksiyon

function get_aktif_sidebar_id() {

    // WooCommerce ürün sayfası
    if ( function_exists('is_product') && is_product() ) {
        return 'urun-detay-sidebar';
    }

    // WooCommerce kategori sayfası
    if ( function_exists('is_product_category') && is_product_category() ) {
        return 'urun-detay-sidebar';
    }

    // Blog tekil yazısı
    if ( is_single() && get_post_type() === 'post' ) {
        return 'blog-yazi-sidebar';
    }

    // Belirli sayfa ID'leri için kurumsal sidebar
    $kurumsal_sayfa_idleri = array( 5, 12, 34 ); // İletişim, Hakkımızda, Ekibimiz
    if ( is_page( $kurumsal_sayfa_idleri ) ) {
        return 'kurumsal-sidebar';
    }

    // Sidebar gösterilmemesi gereken sayfalar
    $sidebar_yok_idleri = array( 7, 19 ); // Landing page'ler
    if ( is_page( $sidebar_yok_idleri ) ) {
        return false; // false döndürerek sidebar'ı gizle
    }

    // Varsayılan sidebar
    return 'sidebar-1';
}

Bu fonksiyon sayesinde tüm karar mantığı tek bir yerde toplanıyor. Bir şeyi değiştirmeniz gerektiğinde yalnızca bu fonksiyona bakmanız yeterli.

Adım 3: Tema Sidebar Dosyasını Güncellemek

Child temanızda bir sidebar.php dosyası oluşturun (veya varsa düzenleyin):

<?php
// child-tema/sidebar.php

$aktif_sidebar = get_aktif_sidebar_id();

// false döndüyse sidebar hiç gösterme
if ( $aktif_sidebar === false ) {
    return;
}

// Sidebar aktif ve dolu mu kontrol et
if ( ! is_active_sidebar( $aktif_sidebar ) ) {
    return;
}
?>

<aside id="secondary" class="widget-area sidebar-<?php echo esc_attr( $aktif_sidebar ); ?>">
    <?php dynamic_sidebar( $aktif_sidebar ); ?>
</aside>

is_active_sidebar() kontrolü önemli. Eğer widget alanı boşsa, yani hiç widget eklenmemişse, gereksiz boş bir

Bir yanıt yazın

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