Kategori Başına Farklı WooCommerce Filtreleri Gösterme (Dinamik Filtreleme)
Farklı ürün kategorilerine göre farklı filtre setlerinin nasıl görüntüleneceğini, bağımlı filtreleme oluşturmayı ve WooCommerce Mağaza sayfası için filtreleri nasıl ö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çeneklerine ihtiyaç duyar:
Örnek senaryolar:
- Elektronik kategorisi: Marka, Ekran Boyutu, Depolama, RAM göster
- Giyim kategorisi: Beden, Renk, Malzeme, Tarz 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: Kullanıcı bir kategori seçtikten sonra bile tüm filtre seçenekleri global kalır ve arayüz ilgisiz filtrelerle karmaşık hale gelir.
Öğrenecekleriniz:
- Bağımlı/koşullu filtreleme nasıl etkinleştirilir (filtreler seçime göre güncellenir)
- Ürün kategorisine göre farklı filtreler nasıl gösterilir
- Mağaza sayfası için özel filtre setleri nasıl oluşturulur
- Gelişmiş görünürlük kontrolü için Widget Logic nasıl kullanılır
Çözüm 1: Bağımlı Filtrelemeyi Etkinleştirme (AJAX Yeniden Çizimi)
İlk adım, kullanıcı seçim yaptığında filtreleri dinamik olarak güncelleyen AJAX form yeniden çizimini etkinleştirmektir.
Widget’lar İçin:
- Görünüm → Widget’lar bölümüne gidin
- WOOF widget’ınızı bulun
- “Form AJAX yeniden çizimi” seçeneğini etkinleştirin
Bu, filtrelerin her seçimden sonra otomatik olarak güncellenmesini ve yalnızca ilgili seçeneklerin gösterilmesini sağlar.
Shortcode’lar İçin:
WOOF shortcode’unuza ajax_redraw niteliğini ekleyin:
[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 olan Alt Türler, Malzemeler, Renkler gösterilir
- İlgisiz seçenekleri gizleyerek karmaşıklığı 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, geçerli ürün kategorisine bağlı olarak farklı filtreler görüntüleyen dinamik bir shortcode oluşturur.
Adım 1: Özel Shortcode Oluşturun
Bu kodu alt tema’nızın functions.php dosyasına ekleyin:
/**
* 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: Shortcode’u Kullanın
Mevcut [woof] shortcode’unuzu aşağıdakiyle değiştirin:
[woof_dynamic]
Bu shortcode’u ş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
$filters_map dizisini kendi gerçek değerlerinizle güncelleyin:
- Kategori slug’ları (ör. ‘tekerlek’, ‘elektronik’)
- Nitelik slug’ları (ör. ‘pa_marka’, ‘pa_beden’)
Slug’larınızı bulma:
Kategori slug’ları:
- Ürünler → Kategoriler bölümüne gidin
- Bir kategori adının üzerine gelin
- URL’ye bakın:
...tag_ID=123&taxonomy=product_cat&post_type=product - Veya kategoriyi düzenleyip slug alanına bakın
Nitelik slug’ları:
- Ürünler → Nitelikler bölümüne gidin
- Bunlar
pa_ile başlar ve ardından nitelik adı gelir - Örnekler:
pa_color,pa_size,pa_brand,pa_material
Çözüm 3: Mağaza Sayfası için Özel Filtreler
Ana WooCommerce Mağaza sayfası, bir kategori arşivi olmadığından farklı bir işlem gerektirir.
Birleşik Çözüm: Mağaza Sayfası + Kategori Sayfaları
Bu kod, hem Mağaza sayfasını hem de bireysel kategori sayfalarını işler:
/**
* 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 kodun yaptığı:
- Mağaza sayfasında: Yalnızca Kategoriler, Renk ve Fiyat filtrelerini gösterir
- Kategori sayfalarında: Eşlemeden kategoriye özgü filtreleri gösterir
- Diğer sayfalarda: Varsayılan filtreleri gösterir
Mağaza sayfası filtrelerini özelleştirin: Mağaza sayfasında farklı filtreler göstermek için bu satırı değiştirin:
[woof tax_only="product_cat,pa_colour" by_price="1" ajax_redraw="1"]
Kullanılabilir parametreler:
tax_only="product_cat,pa_brand"– Yalnızca bu taksonomileri gösterby_price="1"– Fiyat aralığı filtresini gösterby_only="product_cat,pa_brand"– tax_only alternatifiajax_redraw="1"– Dinamik güncellemeleri etkinleştir
Çözüm 4: Koşullu Görünürlük için Widget Logic
Shortcode yerine widget kullanmayı tercih ediyorsanız, koşullu mantıkla widget görünürlüğünü kontrol edebilirsiniz.
Adım 1: Widget Logic Eklentisini Yükleyin
Bu eklentilerden birini seçin:
- Widget Logic: https://wordpress.org/plugins/widget-logic/
- Show Widget by Logic: https://github.com/realmag777/Show-WordPress-Widget-by-Logic
Adım 2: Birden Fazla WOOF Widget’ı Oluşturun
- Görünüm → Widget’lar bölümüne gidin
- Kenar çubuğunuza birden fazla WOOF widget’ı ekleyin
- Her widget’ı farklı filtrelerle yapılandırın
Adım 3: Koşullu Mantık Ekleyin
Her widget için görünürlük koşulları ekleyin:
Yalnızca Tekerlek kategorisinde göster:
is_product_category('wheel')
Yalnızca İç Giyim kategorisinde göster:
is_product_category('lingerie')
Yalnızca Mağaza sayfasında göster:
is_shop() AND !is_product_category()
Birden fazla kategoride göster:
is_product_category(array('wheel', 'lingerie', 'massage-candles'))
Mağaza 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 Etme
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çıklaması:
product_cat– Detaylandırma için kategori filtresini gösterirby_price="1"– Fiyat aralığı kaydırıcısını gösterirajax_redraw="1"– Filtreleri dinamik olarak günceller
Sorun Giderme
Filtreler dinamik olarak güncellenmiyor
Sorun: Seçimden sonra filtreler statik kalıyor
Çözüm:
- Shortcode’unuzda
ajax_redraw="1"olduğundan emin olun - Widget ayarlarında “Form AJAX yeniden çizimi”ni etkinleştirin
- Hatalar için JavaScript konsolunu kontrol edin
Kategoride yanlış filtreler görünüyor
Sorun: Kategori yanlış filtre setini gösteriyor
Çözüm:
- Kategori slug’ının doğru olduğunu doğrulayın (URL veya kategori ayarlarını kontrol edin)
$filters_mapdizisinde küçük harf kullanın- Kategorinin eşlemenizde olup olmadığını kontrol edin
Filtreler hiç görünmüyor
Sorun: Sayfada filtre görünmüyor
Çözüm:
- Nitelik slug’larının
pa_ile başladığını doğrulayın (ör.pa_color,colordeğil) - Niteliklerin o kategorideki ürünlere atanıp atanmadığını kontrol edin
- Temel shortcode’un çalışıp çalışmadığını görmek için geçici olarak
[woof]kullanın
Mağaza sayfası kategori filtrelerini gösteriyor
Sorun: Mağaza sayfası yanlış filtre setini gösteriyor
Çözüm:
- Kodunuzda
is_shop()koşulunun ilk sırada olduğunu doğrulayın !is_product_category()ifadesinin dahil edildiğini kontrol edin- Tüm önbellekleri temizleyin (WordPress, sunucu, tarayıcı)
Nitelik slug’ları çalışmıyor
Sorun: Belirli nitelikler için filtreler görünmüyor
Çözüm:
- Doğru slug’ları bulmak için Ürünler → Nitelikler bölümüne gidin
pa_ön ekini kullanmayı unutmayın (WooCommerce gereksinimi)- Yazımı kontrol edin:
pa_colourvspa_color
Kod eklendikten sonra çalışmıyor
Sorun: Kod eklendikten sonra beyaz ekran veya hatalar
Çözüm:
- Hata günlüğünde PHP sözdizimi hatalarını kontrol edin
- Alt tema’nın functions.php dosyasını düzenlediğinizden emin olun
- Tüm parantez ve tırnak işaretlerinin kapatıldığını doğrulayın
- Kodu kaldırın ve satır satır geri ekleyin
Performans Değerlendirmeleri
AJAX yeniden çizim etkisi:
- Her seçim bir AJAX isteğini tetikler
- Daha fazla ürün = daha uzun yanıt süresi
- Çözüm: Önbelleğe alma kullanın ve veritabanını optimize edin
Birden fazla widget vs. shortcode:
- Widget’lar: Daha fazla bellek kullanımı (tüm widget’lar yüklenir)
- Shortcode: Daha verimli (yalnızca bir set yüklenir)
- Öneri: Shortcode yaklaşımını kullanın
Büyük kataloglar:
- Filtrelerde sayfalandırmayı değerlendirin
- Nitelikler için tembel yükleme kullanın
- Sunucu tarafı önbelleğe alma uygulayın
Alternatif Yaklaşımlar
Birden Fazla Shortcode Kullanma
Tek bir dinamik shortcode yerine birden fazla statik shortcode 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 shortcode’u göstermek için Widget Logic kullanın.
Şablon Dosyalarını Kullanma
Doğrudan tema şablonunuza 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: Her yerde aynı filtreler görünür, arayüz karmaşıklaşır
Çözüm 1: Bağımlı filtreleme için AJAX yeniden çizimini etkinleştirin
Çözüm 2: Kategori eşlemesi ile [woof_dynamic] shortcode’u oluşturun
Çözüm 3: Minimum filtrelerle Mağaza sayfası işlemesi 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 göre uyarlanmış profesyonel ve kullanıcı dostu bir filtreleme deneyimi oluşturur.