HUSKY - Products Filter Professional for WooCommerce

Kategori Başına Farklı Filtreler WOOF'ta (Dinamik Filtreleme) Nasıl Gösterilir

Farklı filtre setlerini ürün kategorilerine göre nasıl görüntüleyeceğinizi, bağımlı filtreleme oluşturacağınızı ve WooCommerce Shop sayfası için filtreleri özelleştireceğinizi öğrenin.

Sorun

Varsayılan olarak WOOF, tüm sayfalarda aynı filtreleri gösterir. Ancak, farklı ürün kategorileri genellikle farklı filtre seçenekleri gerektirir:

Örnek senaryolar:

  • Elektronik kategorisi: Marka, Ekran Boyutu, Depolama, RAM Göster
  • Giyim kategorisi: Boyut, Renk, Malzeme, Stil Göster
  • Mobilya kategorisi: Malzeme, Renk, Boyutlar, Oda Tipi Göster
  • Mağaza sayfası (ana arşiv): Yalnızca Kategoriler, Fiyat Aralığı, Öne Çıkan markaları göster

Mevcut sınırlama: Bir kullanıcı kategori seçtikten sonra bile tüm filtre seçenekleri global kalır, bu da arayüzü alakasız filtrelerle doldurur.

Neler öğreneceksiniz:

  1. Bağımlı/koşullu filtrelemeyi nasıl etkinleştiririm (seçime göre güncellenen filtreler)
  2. Ürün kategorisine göre farklı filtreler nasıl gösterilir
  3. Mağaza sayfası için özel filtre setleri nasıl oluşturulur
  4. Gelişmiş görünürlük kontrolü için Widget Logic nasıl kullanılır

 

Çözüm 1: Bağımlı Filtrelemeyi Etkinleştir (AJAX Yeniden Çizme)

İlk adım, kullanıcıler seçim yaptıklarında filtreleri dinamik olarak güncelleyen AJAX form yeniden çizimini etkinleştirmektir.

Widget'lar için:

  1. Gidin Görünüm → Widget'lar
  2. WOOF widget'ınızı bulun
  3. Seçeneği etkinleştir “Form AJAX yeniden çizimi”

Bu, filtrelerin her seçimden sonra otomatik olarak güncellenmesini sağlar ve yalnızca ilgili seçenekleri gösterir.

Kısa kodlar için:

Ekle ajax_redraw WOOF kısa kodunuza öznitelik:

[woof ajax_redraw="1"]

Bunun yaptığı:

  • Kullanıcı “Tekerlek” seçtiğinde → diğer filtreler otomatik olarak güncellenir
  • Yalnızca Tekerlek için mevcut Alt Tipleri, Malzemeleri, Renkleri gösterir
  • İlgili olmayan seçenekleri gizleyerek karmaşayı azaltır

Dokümantasyon: https://products-filter.com/shortcode/woof

 

Çözüm 2: Kategori Bazlı Filtre Görünürlüğü (Özel Shortcode)

Bu çözüm, mevcut ürün kategorisine bağlı olarak farklı filtreler görüntüleyen dinamik bir kısa kod oluşturur.

 

Adım 1: Özel Kısa Kod Oluşturun

Bu kodu çocuğunuzun temanın functions.php:

/**
 * Dynamic WOOF shortcode that shows different filters per category
 * Usage: [woof_dynamic]
 */
add_shortcode('woof_dynamic', function () {
    // Check if WOOF is active
    if (!function_exists('woof_shortcode')) {
        return '<!-- WOOF plugin not active -->';
    }

    // Get current category
    $term = get_queried_object();

    // Check if we're on a product category page
    if (!$term || !isset($term->taxonomy) || $term->taxonomy !== 'product_cat') {
        return do_shortcode('[woof]'); // Show default filters
    }

    // Get category slug
    $cat = strtolower($term->slug);

    // Define which filters to show for each category
    $filters_map = [
        'wheel' => ['pa_sub-type', 'pa_material', 'pa_colour', 'pa_size'],
        'lingerie' => ['pa_size', 'pa_colour', 'pa_material'],
        'massage-candles' => ['pa_type', 'pa_material', 'pa_brand'],
        'electronics' => ['pa_brand', 'pa_screen-size', 'pa_storage'],
        'clothing' => ['pa_size', 'pa_color', 'pa_material', 'pa_style'],
        'furniture' => ['pa_material', 'pa_color', 'pa_dimensions', 'pa_room'],
    ];

    // If category not in map, show default filters
    if (!isset($filters_map[$cat])) {
        return do_shortcode('[woof]');
    }

    // Build shortcode with specific filters for this category
    $taxonomies = implode(',', $filters_map[$cat]);

    return do_shortcode('[woof tax_only="' . esc_attr($taxonomies) . '" ajax_redraw="1"]');
});

 

Adım 2: Kısa Kodu Kullanın

Mevcut olanınızı değiştirin [woof] ile kısa kod:

[woof_dynamic]

Bu kısa kodu şuraya yerleştirin:

  • Widget alanları (Metin/HTML widget'ı)
  • Sayfa oluşturucu blokları (Elementor, Divi, vb.)
  • Tema şablon dosyaları: <?php echo do_shortcode('[woof_dynamic]'); ?>

 

Adım 3: Kategorilerinizi Yapılandırın

Güncelleme $filters_map gerçeklerinizle birlikte dizi:

  • Kategori takma adları (örneğin, ‘tekerlek’, ‘elektronik’)
  • Öznitelik kısa adları (örn. ‘pa_brand’, ‘pa_size’)

Slug'larınızı bulma:

Kategori slugları:

  • Gidin Ürünler → Kategoriler
  • Bir kategori adına fareyle üzerine gelin
  • URL'ye bakın: ...tag_ID=123&taxonomy=product_cat&post_type=product
  • Veya kategoriyi düzenleyin ve slug alanına bakın

Öznitelik takma adları:

  • Gidin Ürünler → Nitelikler
  • Bunlar ile başlarlar pa_ öznitelik adını takip eder
  • Örnekler: pa_color, pa_size, pa_brand, pa_material

 

Çözüm 3: Mağaza Sayfası İçin Özel Filtreler

Ana WooCommerce Mağaza sayfası farklı bir işlem gerektirir, çünkü bir kategori arşivi değildir.

Birleştirilmiş Çözüm: Mağaza Sayfası + Kategori Sayfaları

Bu kod hem Dükkan sayfasını hem de bireysel kategori sayfalarını ele alır:

/**
 * Dynamic WOOF shortcode with Shop page support
 * Shows minimal filters on Shop, full filters on categories
 */
add_shortcode('woof_dynamic', function () {
    if (!function_exists('woof_shortcode')) {
        return '';
    }

    // Shop page (main product archive) - show minimal filters
    if (is_shop() AND !is_product_category() AND !is_product_tag()) {
        return do_shortcode('[woof tax_only="product_cat,pa_colour" by_price="1" ajax_redraw="1"]');
    }

    // Product category pages - show category-specific filters
    $term = get_queried_object();
    if ($term AND isset($term->taxonomy) AND $term->taxonomy === 'product_cat') {
        $cat = strtolower($term->slug);

        // Define filters for each category
        $filters_map = [
            'wheel' => ['pa_sub-type', 'pa_material', 'pa_colour', 'pa_size'],
            'lingerie' => ['pa_size', 'pa_colour', 'pa_material'],
            'massage-candles' => ['pa_type', 'pa_material', 'pa_brand'],
            'electronics' => ['pa_brand', 'pa_screen-size', 'pa_storage'],
            'clothing' => ['pa_size', 'pa_color', 'pa_material', 'pa_style'],
        ];

        if (isset($filters_map[$cat])) {
            $taxonomies = implode(',', $filters_map[$cat]);
            return do_shortcode('[woof tax_only="' . esc_attr($taxonomies) . '" ajax_redraw="1"]');
        }
    }

    // Fallback - show all filters
    return do_shortcode('[woof ajax_redraw="1"]');
});

Bu kod ne işe yarar:

  1. Mağaza sayfasında: Yalnızca Kategoriler, Renk ve Fiyat filtrelerini gösterir
  2. Kategori sayfalarında: Eşlemeden kategoriye özel filtreler gösterir
  3. Diğer sayfalarda: Varsayılan filtreleri gösterir

Mağaza sayfası filtrelerini özelleştirin: Mağaza sayfasında farklı filtreleri göstermek için bu satırı değiştirin:

[woof tax_only="product_cat,pa_colour" by_price="1" ajax_redraw="1"]

Mevcut parametreler:

  • tax_only="product_cat,pa_brand" – Yalnızca bu taksonomileri göster
  • by_price="1" – Fiyat aralığı filtresini göster
  • by_only="product_cat,pa_brand" – vergi_sadece alternatif
  • ajax_redraw="1" - dinamik güncellemeleri etkinleştir

 

Çözüm 4: Koşullu Görünürlük için Widget Mantığı

Widget'ları kısa kodlar yerine kullanmayı tercih ederseniz, widget görünürlüğünü koşullu mantıkla kontrol edebilirsiniz.

Adım 1: Widget Mantığı Eklentisini Yükleme

Şu eklentilerden birini seçin:

 

Adım 2: Birden Fazla WOOF Widget'ı Oluşturun

  1. Gidin Görünüm → Widget'lar
  2. Kenar çubuğunuza birden fazla WOOF widget'ı ekleyin
  3. Her bir widget'ı farklı filtrelerle yapılandırın

Adım 3: Koşullu Mantık Ekleme

Her widget için görünürlük koşulları ekleyin:

Yalnızca Tekerlek kategorisinde göster:

is_product_category('wheel')

Yalnızca Lingerie kategorisinde göster:

is_product_category('lingerie')

Yalnızca Mağaza sayfasında göster:

is_shop() AND !is_product_category()

Birden çok kategoride göster:

is_product_category(array('wheel', 'lingerie', 'massage-candles'))

Dükkan sayfası hariç her yerde göster:

!is_shop()

Elektronik veya Bilgisayar kategorilerinde göster:

is_product_category('electronics') || is_product_category('computers')

Gerçek Dünya Örnekleri

Örnek 1: Yetişkin Ürünleri Mağazası

$filters_map = [
    'wheel' => ['pa_type', 'pa_material', 'pa_color', 'pa_power-source', 'pa_waterproof'],
    'lingerie' => ['pa_size', 'pa_color', 'pa_style', 'pa_material'],
    'oil' => ['pa_type', 'pa_brand', 'pa_ingredients', 'pa_volume'],
    'toys' => ['pa_category', 'pa_material', 'pa_size', 'pa_color'],
];

 

Örnek 2: Elektronik Mağazası

$filters_map = [
    'laptops' => ['pa_brand', 'pa_processor', 'pa_ram', 'pa_storage', 'pa_screen-size'],
    'smartphones' => ['pa_brand', 'pa_storage', 'pa_ram', 'pa_camera', 'pa_battery'],
    'headphones' => ['pa_brand', 'pa_type', 'pa_connection', 'pa_noise-cancelling'],
    'cameras' => ['pa_brand', 'pa_megapixels', 'pa_sensor-size', 'pa_video-quality'],
];

 

Örnek 3: Moda Mağazası

$filters_map = [
    'mens-clothing' => ['pa_size', 'pa_color', 'pa_material', 'pa_brand', 'pa_style'],
    'womens-clothing' => ['pa_size', 'pa_color', 'pa_material', 'pa_brand', 'pa_occasion'],
    'shoes' => ['pa_size', 'pa_color', 'pa_brand', 'pa_type', 'pa_material'],
    'accessories' => ['pa_color', 'pa_material', 'pa_brand', 'pa_type'],
];

 

Örnek 4: Mobilya Mağazası

$filters_map = [
    'bedroom' => ['pa_type', 'pa_material', 'pa_color', 'pa_style', 'pa_size'],
    'living-room' => ['pa_type', 'pa_material', 'pa_color', 'pa_seating-capacity'],
    'office' => ['pa_type', 'pa_material', 'pa_color', 'pa_ergonomic'],
    'outdoor' => ['pa_type', 'pa_material', 'pa_weather-resistant', 'pa_color'],
];

 

Gelişmiş: Fiyat ve Kategorileri Dahil Et

Niteliklere ek olarak fiyat aralığı ve kategorileri göstermek istiyorsanız:

// On category pages, add price and allow category drill-down
if (isset($filters_map[$cat])) {
    $taxonomies = implode(',', $filters_map[$cat]);
    return do_shortcode('[woof tax_only="product_cat,' . esc_attr($taxonomies) . '" by_price="1" ajax_redraw="1"]');
}

Parametre açıklamaları:

  • product_cat – delme için kategori filtresini gösterir
  • by_price="1" – Fiyat aralığı kaydırıcısını gösterir
  • ajax_redraw="1" – Filtreleri dinamik olarak günceller

Sorun Giderme

Filtreler dinamik olarak güncellenmiyor

Sorun: Seçimden sonra filtreler statik kalır
Çözüm:

  • Emin olmak ajax_redraw="1" kısa kodunuzda
  • Widget ayarlarında "Form AJAX yeniden çizimi"ni etkinleştirin
  • Hatalar için JavaScript konsolunu kontrol edin

Kategori üzerinde yanlış filtreler gösteriliyor

Sorun: Kategori yanlış filtre ayarı gösteriyor
Çözüm:

  • Kategori alt çizgisinin doğru olduğundan emin olun (URL'yi veya kategori ayarlarını kontrol edin)
  • Küçük harf kullanın $filters_map dizi
  • Kategorinizin eşlemenizde mevcut olup olmadığını kontrol edin

Filtreler hiç görünmüyor

Sorun: Sayfada filtre görünmüyor
Çözüm:

  • Öznitelik ön eklerinin şununla başladığını doğrulayın pa_ (örneğin, pa_color değil color)
  • Bu kategorideki ürünlere özniteliklerin atanıp atanmadığını kontrol edin
  • Kullan [woof] temel kısa kodun çalışıp çalışmadığını görmek için geçici olarak

Mağaza sayfası kategori filtrelerini gösterir

Sorun: Mağaza sayfası yanlış filtre ayarını gösteriyor
Çözüm:

  • Doğrula is_shop() koşulu kodunuzda ilk sırada
  • Kontrol edin !is_product_category() dahildir
  • Tüm önbellekleri temizleyin (WordPress, sunucu, tarayıcı)

Öznitelik takma adları çalışmıyor

Sorun: Belirli öznitelikler için filtreler gösterilmiyor
Çözüm:

  • Gidin Ürünler → Nitelikler doğru slug'ları bulmak için
  • Kullanmayı unutmayın pa_ önek (WooCommerce gereksinimi)
  • Yazım denetimi: pa_colour vs pa_color

Ekleme sonrası kod çalışmıyor

Sorun: Kod ekledikten sonra beyaz ekran veya hatalar
Çözüm:

  • PHP sözdizimi hatalarını hata günlüğünde kontrol edin
  • Çocuğun temanızın functions.php dosyasını düzenlediğinizden emin olun
  • Tüm parantezlerin ve tırnak işaretlerinin kapalı olduğundan emin olun
  • Kodu kaldırın ve satır satır geri ekleyin

Performans Hususları

AJAX yeniden çizme etkisi:

  • Her seçim AJAX isteğini tetikler
  • Daha fazla ürün = daha uzun yanıt süresi
  • Çözüm: Önbellekleme kullanın ve veritabanını optimize edin

Birden çok widget'a karşı shortcode:

  • Widget'lar: Daha fazla bellek kullanımı (tüm widget'lar yüklenir)
  • Kısa kod: Daha verimli (sadece bir set yüklenir)
  • Öneri: Kısa kod yaklaşımını kullanın

Büyük kataloglar:

  • Filtrelerde sayfalama düşünün
  • Öznitelikler için tembel yükleme kullanın
  • Sunucu taraflı önbellekleme uygulayın

Alternatif Yaklaşımlar

Birden Fazla Kısa Kod Kullanma

Tek bir dinamik kısa kod yerine birden çok statik kısa kod kullanın:

// On wheel category page
[woof tax_only="pa_sub-type,pa_material,pa_colour,pa_size" ajax_redraw="1"]

// On Lingerie category page
[woof tax_only="pa_size,pa_colour,pa_material" ajax_redraw="1"]

// On Shop page
[woof tax_only="product_cat,pa_colour" by_price="1" ajax_redraw="1"]

Ardından her sayfada doğru kısa kodu göstermek için Widget Mantığını kullanın.

Şablon Dosyalarını Kullanma

Tema şablonunuza doğrudan koşullu mantık ekleyin:

<?php
if (is_product_category('books')) {
    echo do_shortcode('[woof tax_only="pa_sub-type,pa_material,pa_colour,pa_size"]');
} elseif (is_product_category('lingerie')) {
    echo do_shortcode('[woof tax_only="pa_size,pa_colour,pa_material"]');
} elseif (is_shop()) {
    echo do_shortcode('[woof tax_only="product_cat,pa_colour" by_price="1"]');
} else {
    echo do_shortcode('[woof]');
}
?>

Özet

Sorun: Aynı filtreler her yerde gösteriliyor, arayüzü karıştırıyor

Çözüm 1: Bağımlı filtreleme için AJAX yeniden çizimi etkinleştir

Çözüm 2: Oluştur [woof_dynamic] kategori eşleştirmeli kısa kod

Çözüm 3: Minimum filtrelerle Dükkan sayfası işlemesini ekleyin

Çözüm 4: Gelişmiş görünürlük kontrolü için Widget Logic kullanın

En İyi Yaklaşım: Kapsamlı dinamik filtreleme için Çözüm 2 + 3'ü birleştirin

Anahtar Kod:

add_shortcode('woof_dynamic', function() {
    // Shop page logic
    if (is_shop() AND !is_product_category()) {
        return do_shortcode('[woof tax_only="product_cat" by_price="1"]');
    }
    
    // Category mapping
    $term = get_queried_object();
    if ($term AND $term->taxonomy === 'product_cat') {
        $filters_map = [
            'category-slug' => ['pa_attribute1', 'pa_attribute2'],
        ];
        // Return category-specific filters
    }
    
    return do_shortcode('[woof]'); // Fallback
});

Bu, her ürün kategorisine özel profesyonel ve kullanıcı dostu bir filtreleme deneyimi oluşturur.