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:
- Bağımlı/koşullu filtrelemeyi nasıl etkinleştiririm (seçime göre güncellenen filtreler)
- Ü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ş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:
- Gidin Görünüm → Widget'lar
- WOOF widget'ınızı bulun
- 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:
- Mağaza sayfasında: Yalnızca Kategoriler, Renk ve Fiyat filtrelerini gösterir
- Kategori sayfalarında: Eşlemeden kategoriye özel filtreler gösterir
- 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österby_price="1"– Fiyat aralığı filtresini gösterby_only="product_cat,pa_brand"– vergi_sadece alternatifajax_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:
- Widget Mantığı: https://wordpress.org/plugins/widget-logic/
- Widget'ı Mantığa Göre Göster: https://github.com/realmag777/Show-WordPress-Widget-by-Logic
Adım 2: Birden Fazla WOOF Widget'ı Oluşturun
- Gidin Görünüm → Widget'lar
- Kenar çubuğunuza birden fazla WOOF widget'ı ekleyin
- 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ö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ı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_mapdizi - 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_colordeğilcolor) - 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_colourvspa_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.