HUSKY - WooCommerce Product Filter Professional

WooCommerce Filtresi: Yalnızca Geçerli Kategorinin Niteliklerini Gösterin

Birkaç ürün kategorisi aynı niteliği paylaştığında, WooCommerce filtresi çoğu zaman sayfada anlamsız kalan değerler sunar: buzdolaplarının altında Izgara (Grill), kulaklıkların altında 512 GB, bu kategoride satılmayan markalar. Bunlara tıklamak boş bir sonuç getirir. WooCommerce filtresinin yalnızca geçerli kategorinin niteliklerini göstermesi için HUSKY, sayfadaki her terimin arkasındaki ürünleri sayar ve sayısı sıfır olan terimleri gizler. Aşağıda bunun nasıl çalıştığını, tam ayarları, sayıları nasıl görünmez tutacağınızı ve kategorinin hiç bilinmediği durumları bulacaksınız.

Filtre geçerli kategoriye neyin ait olduğunu nasıl bilir?

Bir ürün kategorisi sayfasında ve diğer tüm ürün taksonomisi arşivlerinde (bir etiket, bir nitelik arşivi, bir marka) HUSKY, sayfanın gösterdiği terimi hatırlar. Dinamik yeniden sayım (Dynamic recount) açıkken, her filtre teriminin yanındaki sayı şöyle hesaplanır: bu kategorideki, ziyaretçinin şimdiye kadar seçtiği her şeyle eşleşen ve ayrıca bu terime sahip olan ürünler. Kategorideki hiçbir ürünün sahip olmadığı bir değer 0 alır.

Boş terimleri gizle (Hide empty terms) ardından 0 olan her terimi formdan kaldırır. Bir bölümün tüm terimleri kaldırıldığında bölümün tamamı, başlığı dahil, kaybolur; böylece kategoride kullanılmayan bir nitelik kenar çubuğundan silinir. Kategori bölümünün kendisi, görüntülenen kategorinin alt kategorilerine indirgenir; filtrenin neden yalnızca alt kategorileri gösterdiği bu kısmı ve istisnalarını açıklar.

Kategori başına hiçbir şey yapılandırmanız gerekmez. Kenar çubuğuna veya kategori şablonuna yerleştirilen aynı form, her kategori sayfasına kendiliğinden uyum sağlar.

Boş terimleri gizleyen üç ayar

Eklenti ayarlarını açın, Seçenekler (Options) sekmesine gidin ve şunları yapın:

  1. Sayıyı göster (Show count): Evet
  2. Dinamik yeniden sayım (Dynamic recount): Evet
  3. Boş terimleri gizle (Hide empty terms): Evet

Kaydedin, ardından eski sayıları tutabilecek tüm önbellekleri temizleyin: kullanıyorsanız Gelişmiş → Seçenekler (Advanced → Options) bölümündeki Filtredeki her öğe için dinamik yeniden sayım numarasını önbelleğe al (Cache dynamic recount number for each item in filter) ve Terimleri önbelleğe al (Cache terms) ile sitenizin sayfa önbelleğini.

Üç seçenek birbirine bağlıdır ve ayar sayfası bunu zorunlu kılar: boş bir terim ancak sayarak bulunabilir. Boş terimleri gizle (Hide empty terms) seçeneğini açmak diğer ikisini de açar, Sayıyı göster (Show count) seçeneğini kapatmak ise diğer ikisini de kapatır. Sayılardan kurtulmak için Sayıyı göster (Show count) değerini Hayır yaparsanız, boş terimler her sayfada geri gelir. Olası birleşimler:

Sayıyı göster / Dinamik yeniden sayım / Boş terimleri gizleZiyaretçilerin gördüğü
Hayır / Hayır / HayırTüm terimler, sayı yok
Evet / Hayır / HayırMağaza genelinde sayılar; hiç ürünü olmayan terimler gri görünür
Evet / Evet / HayırGeçerli kategori ve seçim için sayılar; sıfır olan terimler görünür kalır ama gridir ve seçilemez
Evet / Evet / EvetSıfır olan terimler gizlenir; boş bölümler kaybolur

Üçüncü satır, kullanılamayan değerleri kaldırmak yerine pasif olarak göstermeyi tercih ettiğinizde yapılacak seçimdir. Birkaç yer daha genel seçenekleri geçersiz kılabilir:

  • Ücretsiz sürümde Boş terimleri gizle (Hide empty terms) ve Terim sayısı metnini gizle (Hide terms count text) (aşağıda) gridir; bunlar premium sürümün parçasıdır.
  • HUSKY filtre widget'ının kendi Dinamik yeniden sayım (Dynamic recount) alanı vardır (Varsayılan (Default), Hayır (No), Evet (Yes)). Hayır (No) olarak ayarlanırsa o widget genel ayarı yok sayar. [woof] kısa kodu aynı anahtara dynamic_recount=1 veya dynamic_recount=0 olarak sahiptir.
  • Turbo modu etkinleştirildiğinde Seçenekler (Options) sekmesi, Turbo modu için bu üç ayarın ayrı kopyalarını gösterir. Etkinleştirdikten sonra onları yeniden ayarlayın.
  • Aralık kaydırıcısı olarak görüntülenen bir taksonomi, genel seçeneklerle yeniden sayılmaz. Ek seçeneklerini açın (Yapı (Structure) sekmesinde taksonominin yanındaki dişli simgesi) ve Dinamik yeniden saymayı etkinleştir (Enable dynamic recount) ayarını Evet yapın; ürünü olmayan değerler bundan sonra kaydırıcı ölçeğinin dışında kalır.

Seçenekler sekmesi belgeleri, aynı ekrandaki diğer ayarları açıklar.

Sayıyı göstermeden boş terimleri gizleyin

En yaygın istek, (12) gibi sayıları yazdırmadan boş terimleri gizlemektir. Üç seçeneği de açık tutun ve Gelişmiş → Seçenekler (Advanced → Options) bölümüne gidin: Terim sayısı metnini gizle (Hide terms count text) ayarını Evet yapın. Eklenti, neyin boş olduğunu bilmek için gerekli olan sayıları yine hesaplar ama yazdırmaz. Bunu yalnızca tek bir form için yapmak üzere kısa koduna hide_terms_count=1 ekleyin, örneğin [woof hide_terms_count=1].

Sayacı CSS ile gizlemek onay kutuları ve radyo düğmeleri için de işe yarar (.woof_checkbox_count, .woof_radio_count), ancak açılır listeler için yaramaz: orada sayı seçenek metninin parçasıdır ve kendi öğesi yoktur. Ayar her filtre türünü kapsar.

Sayacı yalnızca bazı bölümlerde değiştirmek için woof_term_count_format kancasını kullanın. Kanca, varsayılanı (%d) olan biçimi ve taksonomi slug'ını alır:

/*
 * HUSKY: counter format per filter section.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('woof_term_count_format', function ($format, $tax_slug) {
    // no numbers at all in the Tags and Brand sections
    if (in_array($tax_slug, array('product_tag', 'pa_brand'), true)) {
        return '';
    }
    // "12" instead of "(12)" everywhere else
    return '%d';
}, 10, 2);

Boş terimler bu bölümlerde yine gizlenir, çünkü gizleme yazdırılan metne değil, hesaplanan sayıya bağlıdır. Sayıları yalnızca bir kategori ağacının en alt düzeyinde göstermek için, alt öğeleri olan terimlerin sayaçlarını CSS ile gizleyin (temanızın Özel CSS alanı):

.woof_childs_list_li > .woof_checkbox_label > .woof_checkbox_count {
    display: none;
}

Seçili bir terim hiçbir zaman sayı göstermez. Bu bilinçli bir tasarımdır: yeniden sayım, aramanın zaten parçası olan terimleri atlar.

İlk seçimden sonra diğer değerler neden kaybolur?

Dinamik yeniden sayım formu her seçimle daraltır: Marka: Bosch (Brand: Bosch) seçildikten sonra yalnızca bu kategorideki Bosch ürünlerinin sahip olduğu renkler kalır. Özelliğin amacı budur. Yalnızca tek bir bölüm için kapatılamaz.

Farklı bir durum, bir rengi seçmenin diğer tüm renkleri gizlemesidir. Bu, bölümün mantığından kaynaklanır. Taksonominin ek seçeneklerini açın (Yapı (Structure) sekmesindeki dişli simgesi) ve Filtreleme mantığı (Logic of filtering) alanına bakın:

  • OR (varsayılan): seçilen değerlerden en az birine sahip ürünler. Diğer her renk (diğer bölümlerdeki seçimler dahilinde) tek başına sayılır; böylece kategoride bulunan renkler kalır.
  • AND: seçilen tüm değerlere aynı anda sahip ürünler. Diğer her rengin sayısı "aynı anda hem kırmızı hem mavi olan ürünler" olur, bu da genellikle 0'dır; bu yüzden Boş terimleri gizle (Hide empty terms) açıkken kaybolurlar.
  • NOT IN: seçilen değerlere sahip ürünleri hariç tutar.

Renkler, bedenler ve ziyaretçinin "bu ya da şu" istediği çoğu nitelik için doğru mantık OR'dur. AND'i, "Wi-Fi ve Bluetooth" gibi hepsinin birlikte bulunması gereken özellikler için saklayın.

Ürünler yüklenmeden önce daralan seçenekler için (bağımlı açılır listelerden oluşan bir bulucu), [woof ajax_redraw=1 autosubmit=1] kullanın: her değişiklik yalnızca formu yeniden sayılmış seçeneklerle yeniden çizer ve filtre düğmesi ürünleri yükler. ajax_redraw AJAX modu için tasarlanmamıştır; bu yüzden o form için Mağazayı AJAX'a çevirmeyi dene (Try to ajaxify the shop) seçeneğini kapalı tutun.

Mağaza sayfası, özel sayfalar ve sayfa oluşturucular

Otomatik daraltma bir taksonomi arşivi gerektirir. Başka yerlerde geçerli bir kategori yoktur:

  • Ana mağaza sayfası tüm kataloğu gösterir; bu yüzden ziyaretçi bir şey seçene kadar yalnızca mağazada hiç ürünü olmayan değerler gizlenir. Bu doğru davranıştır.
  • Bir WordPress sayfası (bir ana sayfa, bir açılış sayfası, tek bir kategoriyi listeleyen Elementor veya Divi ile oluşturulmuş bir sayfa), yalnızca o kategorinin ürünlerini gösterse bile bir kategori arşivi değildir. Filtre bunu bilemez ve her şeyi listeler.

Böyle bir sayfada her iki kısa koda da sayfanın hangi kategoriyle ilgili olduğunu söyleyin. Ürünler → Kategoriler (Products → Categories) sayfasındaki terim kimliğini kullanın:

[woof taxonomies=product_cat:15]
[woof_products taxonomies=product_cat:15 per_page=12]

[woof] kısa kodunun taxonomies özniteliği, sayıların ve gizlemenin o kategoriyi izlemesini sağlar; [woof_products] içindeki aynı öznitelik ise gösterilen ürünleri sınırlar. Aynı taksonomiye ait birden çok kimlik virgülle ayrılır (product_cat:15,16, ikisinden birindeki ürünler), birden çok taksonomi artı işaretiyle ayrılır (product_cat:15+pa_color:22). Yalnızca yukarıdaki üç seçenek açıkken çalışır. Bu tür sayfaların tam kurulumu özel sayfada veya ana sayfada ürün filtresi bölümündedir.

Farklı değerler yerine kategori başına farklı bir bölüm kümesi istiyorsanız kategori başına farklı filtreler nasıl gösterilir bölümüne bakın.

Gerçek bir kategori arşivindeki filtre hâlâ Mağaza sayfasındaki gibi davranıyorsa, temanın arşiv şablonu geçerli kategoriyi eklentiden gizliyor olabilir; bu çoğunlukla blok tabanlı şablonlarda görülür. Gelişmiş → Seçenekler (Advanced → Options) bölümünde Kategori sayfasının ek denetimi (Additional check of the category page) ayarını Evet yapın.

Dinamik yeniden sayımsız daha hafif bir seçenek

Yalnızca mağazanın hiçbir yerinde ürünü olmayan terimleri (eski bedenler, satışını bıraktığınız bir marka) gizlemeniz gerekiyorsa dinamik yeniden sayıma ihtiyacınız yoktur. Bu kod parçası, HUSKY terimleri yüklerken WordPress'ten bunları atlamasını ister:

/*
 * HUSKY: do not list terms that have no published products at all.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('woof_get_terms_args', function ($args) {
    $args['hide_empty'] = true;
    return $args;
});

Sayfa yüklenirken hiçbir maliyeti yoktur, ancak geçerli kategoriyi veya ziyaretçinin seçimini bilmez: yalnızca ayakkabılarda bulunan bir beden, gömlekler kategorisinde yine görünür. Terimleri önbelleğe al (Cache terms) açıksa, kodu ekledikten sonra terim önbelleğini temizleyin. Boş terimler nasıl gizlenir SSS bölümü aynı kod parçasını gösterir.

Büyük kataloglarda dinamik yeniden sayımın maliyeti

Formdaki her terim, gizli olanlar dahil, her sayfa görüntülemesinde kendi sayım sorgusuna ihtiyaç duyar; bu yüzden 300 terimli bir form yaklaşık 300 sayım sorgusu çalıştırır. Birkaç bin üründe bu fark edilmez; on binlerce üründe her kategori sayfasını yavaşlatabilir. Özelliği kapatmadan önce:

  • Gelişmiş → Seçenekler (Advanced → Options) bölümünde Filtredeki her öğe için dinamik yeniden sayım numarasını önbelleğe al (Cache dynamic recount number for each item in filter) seçeneğini etkinleştirin;
  • daraltmanın gerekmediği formlarda, örneğin üst bilgideki bir arama formunda, dynamic_recount=0 kullanın;
  • veritabanı sorguları yerine hazırlanmış bir veri dosyasından filtreleyen ve sayan Turbo modunu düşünün.

Ayrıntılar büyük kataloglarda ürün filtrelemeyi hızlandırma bölümündedir.

İlgisiz seçenekler hâlâ görünüyorsa kontrol listesi

  • Sayıyı göster (Show count), Dinamik yeniden sayım (Dynamic recount) ve Boş terimleri gizle (Hide empty terms) hepsi Evet'tir (Turbo modu açıksa onların Turbo modu kopyaları).
  • Sayılar, Sayıyı göster (Show count) Hayır yapılarak değil, Terim sayısı metnini gizle (Hide terms count text) ile gizlenmiştir.
  • Widget'ın Dinamik yeniden sayım (Dynamic recount) alanı Varsayılan (Default) veya Evet (Yes) durumundadır; kısa kodda dynamic_recount=0 yoktur.
  • Gerçek bir kategori arşivinde test ediyorsunuz veya özel bir sayfada kısa kodda taxonomies= vardır.
  • Yeniden sayım önbelleği, terim önbelleği ve sayfa önbelleği değişiklikten sonra temizlenmiştir.
  • Bir seçimden sonra diğer değerlerin kalması gerekiyorsa, niteliğin Filtreleme mantığı (Logic of filtering) alanı OR'dur.

Bunların hepsi yerindeyse ve bir kategori hâlâ ürünü olmayan değerleri listeliyorsa, kategori sayfasının bağlantısı ve gizlenmesi gereken değerle birlikte HUSKY destek forumunda bir konu açın.