HUSKY - WooCommerce Product Filter Professional

Nitelikler ve Meta Alanları için WooCommerce Aralık Kaydırıcı Filtresi

Boyut, güç, uzunluk, ekran çapı, yıl, kilometre: sayısal ürün verileri uzun bir onay kutusu listesi yerine bir aralık kaydırıcısı gerektirir. Nitelikler için bir WooCommerce aralık kaydırıcı filtresini HUSKY'de açmak kolaydır; ancak 9000'den önce 100000'i gösteren, 1,9'u iki değere bölen veya her zaman 0 ile 100 arasında çalışan bir kaydırıcıyla karşılaşmak da aynı derecede kolaydır. Neden hemen her zaman aynıdır: iki farklı kaydırıcı vardır ve sayılara farklı davranırlar. Bu rehber her ikisini, her birinin kurulumunu ve yanlış sıra, ondalıklar ve boş aralıklar için çözümleri açıklar.

İki aralık kaydırıcısı: nitelik değerleri veya sayısal bir meta alanı

HUSKY iki tür veriden bir aralık kaydırıcısı oluşturabilir ve bu seçim kaydırıcının neler yapabileceğini belirler.

Nitelik (taksonomi) kaydırıcısıMeta alanı kaydırıcısı
VeriGenel bir niteliğin veya başka bir ürün taksonomisinin terimleriÜrün meta verisinde saklanan bir sayı: _length, _weight, bir ACF sayı alanı, herhangi bir özel alan
Aralık ne anlama gelirİki tutamak arasındaki tüm terimler, terimlerin listelendiği sıraylaGerçek bir sayısal karşılaştırma: değer başlangıç ile bitiş arasında
Kaydırıcı konumlarıMevcut her terim için bir durak, eşit aralıklıEn düşük ile en yüksek arasında, sizin adımınızla herhangi bir değer
En düşük ve en yüksekİlk ve son terimAralık (Range) seçeneğinde elle ayarlanır
Başlangıç/bitiş sayı kutularıHayırEvet, Girişleri göster (Show inputs)
Metin ölçekleri (Yumuşak, Orta, Sert)EvetHayır, yalnızca sayılar
Varyasyonlu ürünlerÜrünün nitelik terimlerine göre bulunurYalnızca ürünün kendi meta verisi aranır, varyasyonları aranmaz

Temel fark şudur: nitelik terimleri metindir. WordPress 9000 ve 100000 değerlerini sayı olarak değil, ad olarak saklar; bu yüzden nitelik kaydırıcısı yalnızca belirli bir sıradaki terim listesi boyunca ilerleyebilir. Hiçbir şey hesaplamaz. Meta alanı kaydırıcısı ise sayıları veritabanında karşılaştırır, bu yüzden başka hiçbir üründe bulunmayan değerler dahil, bir aralıktaki her değeri işler.

Bir ürünün Nitelikler sekmesine doğrudan yazılan, arkasında genel bir nitelik olmayan özel ürün nitelikleri taksonomi değildir ve hiçbir filtre türü bunları kullanamaz. Önce Ürünler → Nitelikler altında genel bir nitelik oluşturun (WooCommerce belgelerindeki ürün taksonomilerini yönetme sayfasına bakın).

Nitelikler için aralık kaydırıcı filtresi kurun

  1. Genel niteliği oluşturun, örneğin Güç (Power), ve değerlerini terim olarak ekleyin: 5, 7.5, 10, 15. Bunları her zamanki gibi ürünlere atayın.
  2. WooCommerce → Ayarlar → Ürün Filtresi → Yapı sayfasını açın ve bu niteliğin türünü Kaydırıcı (Slider) olarak ayarlayın. Bu türü Kaydırıcı uzantısı ekler.
  3. Niteliğin yanındaki ek seçenekler (additional options) düğmesine (çark) tıklayın ve kaydırıcı seçeneklerini ayarlayın:
    • Tür (Type): başlangıç-bitiş aralığı için çift (double); ilk değerden tutamağa kadar her şeyi seçen tek tutamak için tek (single) ("10 kW'a kadar").
    • Izgara adımı (Grid step): kaydırıcının altındaki hangi etiketlerin görüneceği. 1 hepsini gösterir, 2 her ikincisini, -1 uçlar arasındaki etiketleri gizler. Uzun değerler üst üste bindiğinde işe yarar.
    • Dinamik yeniden sayımı etkinleştir (Enable dynamic recount): geçerli sonuçlarda ürünü olmayan değerleri çıkarır (aşağıya bakın).
    • Kaydırıcı teması (Slider skin): bu kaydırıcının tasarımı.
  4. Filtreleme mantığı (Logic of filtering) ayarını VEYA (OR) olarak bırakın. Kaydırıcı seçilen aralığın her terimini gönderir, örneğin pa_power=5,7-5,10, ve bir ürünün bunlardan yalnızca birine sahip olması yeterlidir. VE (AND) ile bir ürünün hepsine sahip olması gerekirdi ve hiçbir şey bulunmazdı.

Bir aralık "tutamaklar arasındaki terimler" olduğundan, terimlerin sırası kaydırıcının tüm mantığıdır. Listede 6.5, 8.2'den sonra yer alıyorsa, 6 ile 7 arasındaki bir aralık onu atlar. Bir sonraki bölüm sırayı düzeltir.

Yanlış sıradaki nitelik kaydırıcı değerleri

Tipik belirtiler: 100000, 9000'den önce gelir; 10 ve 11, 2'den önce gelir; negatif değerler -1, -2, -3, 0, 1 şeklinde akar veya sürüklerken tutamaklar ileri geri sıçrar. Hepsi metin sıralamasıdır. Çözüm, terimlere sayısal bir sıra vermektir.

En iyisi: WooCommerce niteliği sayısal olarak sıralasın

Ürünler → Nitelikler bölümüne gidin, niteliği düzenleyin ve Varsayılan sıralama düzeni (Default sort order) ayarını Ad (sayısal) (Name (numeric)) yapın. WooCommerce o zaman terimleri adlarının sayısal değerine göre sıralar; bu, noktayla yazılmış ondalıkları, negatif sayıları ve 10 cm gibi sayıyla başlayan adları işler. Kaydırıcının ek seçeneklerinde Terimleri sırala (Sort terms) ayarını Varsayılan (Default) bırakın, böylece HUSKY bu sırayı korur. Terimleri önbelleğe al (Cache terms) açıksa (Gelişmiş → Seçenekler), ardından terim önbelleğini temizle (clear terms cache) düğmesine basın.

Metin ölçeği için bunun yerine Özel sıralama (Custom ordering) seçin ve terimleri niteliğin Terimleri yapılandır (Configure terms) ekranında yerlerine sürükleyin: Yumuşak, Orta, Orta-sert, Sert. Aynı sürükle-bırak, sırasını elle denetlemek istediğiniz her sayısal liste için çalışır.

HUSKY'nin kendi Terimleri sırala seçenekleri

Kaydırıcının ek seçeneklerindeki Terimleri sırala (Sort terms) seçeneği varsayılan sırayı geçersiz kılar:

  • Başlık (Title) adların doğal sıralamasını kullanır: tam pozitif sayılar (2, 10'dan önce) ve 10 cm gibi adlar için doğrudur, ancak ondalıklar veya negatif sayılar için değildir.
  • Sayısal. (Numeric.) terimin slug değerinin tam sayı kısmını karşılaştırır. Yalnızca tam pozitif sayılar için çalışır: 6.5 değerinin slug'ı 6 sayılan 6-5'tir ve WordPress slug oluştururken baştaki eksiyi kaldırır, bu yüzden -3 3 olarak sıralanır.

Kod: her taksonomi kaydırıcısı için sayısal sıra

WooCommerce'in Ad (sayısal) (Name (numeric)) seçeneğinin bulunmadığı özel bir taksonomi için kaydırıcı değerlerini kodla sıralayın. woof_sort_terms_before_out filtresi her filtrenin terimlerini ve filtre türünü alır:

/**
 * HUSKY: order the values of every taxonomy range slider by their number
 * (decimals with a dot and negative numbers included).
 * Child theme functions.php or a code snippets plugin.
 */
add_filter( 'woof_sort_terms_before_out', function ( $terms, $type ) {
    if ( 'slider' === $type && is_array( $terms ) ) {
        uasort( $terms, function ( $a, $b ) {
            return (float) $a['name'] <=> (float) $b['name'];
        } );
    }
    return $terms;
}, 20, 2 );

Başında sayı olmayan terimlerin (metin ölçeği) tümü burada 0 sayılır ve mevcut sıralarını korur; dolayısıyla bu kod parçası bu tür kaydırıcıları bozmaz.

Nitelik kaydırıcılarında ondalıklar, virgüller ve eşit olmayan adımlar

  • Ondalıkları noktayla yazın. Kaydırıcı etiketlerini virgülle ayrılmış tek bir liste olarak alır; bu yüzden 1,9 adlı bir terim 1 ve 9 olmak üzere iki etikete dönüşür ve ondan sonraki her konum yanlış terime işaret eder. Bu tür terimleri 1.9 olarak yeniden adlandırın. Bunun mağazanın ondalık ayırıcı ayarıyla ilgisi yoktur: terim adları düz metindir.
  • Konumlar terim başına eşit aralıklıdır, değer başına değil. 1, 2, 5 ve 50 terimleri dört eşit adım alır. Kaydırıcının orantılı görünmesini istiyorsanız, eksik ara değerleri terim olarak ekleyin.
  • Bir kaydırıcı en az iki değer gerektirir. Yalnızca iki terimle tutamaklar yalnızca iki uçta durabilir. Dinamik yeniden sayımdan sonra ikiden az değer kalırsa, kaydırıcı hiç gösterilmez.
  • Yalnızca mevcut terimler seçilebilir. 6.5 değerine sahip bir ürün, ancak 6.5 terimi varsa ve tutamaklar arasında yer alıyorsa bulunur.

Meta alanları için aralık kaydırıcı: boyutlar, yıllar ve diğer sayılar

Değer gerçek bir ölçüm olduğunda, bir meta alanı kaydırıcısı genellikle daha iyi araçtır: sayıları karşılaştırır, başlangıç/bitiş girişlerini kabul eder ve binlerce farklı değerde bile hızlı kalır. Meta Alanları uzantısıyla kurulum:

  1. Filtre ayarlarının Meta Veri (Meta Data) sekmesini açın. Anahtarı Özel anahtarı elle ekle (Add Custom key by hands) alanına girin ya da bir ürünün hangi anahtarlara sahip olduğunu görmek için Anahtarları kimliğine göre herhangi bir üründen al (Get keys from any product by its ID) seçeneğini kullanın.
  2. Alanın türünü sayı (number), görünümünü Kaydırıcı (Slider) olarak ayarlayın. Kaydırıcı metin veya tarih alanları için sunulmaz. Kaydedin.
  3. Alanın ek seçeneklerini açın ve Aralık (Range) alanını min^max biçiminde doldurun, örneğin 10^250. Adım (Step) ayarlayın (0.5 çalışır) ve gerekirse Önek (Prefix), Sonek (Postfix) (cm), başlangıç/bitiş sayı kutuları için Girişleri göster (Show inputs) ve binlik ayırıcı için Güzelleştirmeyi kullan (Use prettify) seçeneklerini belirleyin.
  4. Yeni filtre öğesini Yapı sekmesinde diğerleri gibi yerleştirin.

Yararlı anahtarlar: WooCommerce bir ürünün kargo boyutlarını ve ağırlığını _length, _width, _height ve _weight olarak saklar. Bir ACF sayı alanı kendi alan adı altında saklanır. Meta anahtarları hakkında ayrıntılar meta veri belgelerinde bulunur.

Meta kaydırıcıları hakkında bilinmesi gerekenler:

  • Aralık asla hesaplanmaz. Kaydırıcı tam olarak girdiğiniz Aralık (Range) değerini gösterir; boş bir alan 0–100'e döner. Gerçek en düşük ve en yüksek değeri bulmak, her sayfa görüntülemesinde her ürünü okumak anlamına gelirdi. Dinamik yeniden sayım hangi filtrelerin ve değerlerin gösterileceğine karar verir, kaydırıcının nerede başlayıp bittiğine değil. Yeni ürünler aralığın dışına çıktığında aralığı güncelleyin.
  • Düz sayılar saklayın; ondalık ayırıcı nokta olsun, binlik ayırıcı olmasın: 1250.5. Veritabanı değerin yalnızca başındaki sayıyı okur, bu yüzden 1,250.5 1 olarak, 1250,5 ise 1250 olarak karşılaştırılır.
  • Yıllar: 1990^2026 gibi bir aralık, adım 1 ve Güzelleştirmeyi kullan (Use prettify) ayarı Hayır; aksi halde 2026, 2 026 olarak gösterilir.
  • Varyasyonlar: ürünün kendi meta verisi aranır. Değer yalnızca varyasyonlarda varsa, onu üst ürüne de kaydedin ya da bir nitelik kullanın.

Ondalık değerler: woof_slider_meta_query_type

Varsayılan olarak meta kaydırıcısı değerleri, MySQL'in tam sayı olarak ele aldığı NUMERIC türüyle karşılaştırır. Bu durumda 10.11 değerine sahip bir ürün 1–10 aralığında bulunur ve 4.2, 4.4 ile 4.6'nın hepsi 4 sayılır. Ondalıkları karşılaştırmak için türü woof_slider_meta_query_type filtresiyle değiştirin:

/**
 * HUSKY: compare these meta sliders as decimal numbers.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter( 'woof_slider_meta_query_type', function ( $type, $meta_key ) {
    if ( in_array( $meta_key, array( '_length', '_width', '_height', 'screen_size' ), true ) ) {
        return 'DECIMAL(10,2)'; // up to 99999999.99
    }
    return $type;
}, 10, 2 );

DECIMAL(M,D) içinde M toplam basamak sayısı, D ise noktadan sonraki basamak sayısıdır. Bunları en büyük değerinize uyacak şekilde seçin: DECIMAL(5,3) ile en yüksek değer 99.999'dur ve daha büyük her değer 99.999 olarak ele alınır.

Geçerli kategoriye uymayan kaydırıcıları gizleyin

  • Nitelik kaydırıcısı: ek seçeneklerinde Dinamik yeniden sayımı etkinleştir (Enable dynamic recount) ayarını Evet yapın. Geçerli kategoride ve filtre seçiminde ürünü olmayan değerler kaybolur ve ikiden az değer kaldığında kaydırıcı kaldırılır. Her değer bir ek sayım sorgusuna mal olur; bu yüzden yüzlerce terimi olan niteliklerde sayfa hızını izleyin ya da bir meta kaydırıcısı kullanın.
  • Meta kaydırıcısı: Seçenekler sekmesinde Boş terimleri gizle (Hide empty terms) ayarı Evet iken, geçerli sonuçlarda aralığı içinde ürünü olmayan bir meta kaydırıcısı gösterilmez.

Değeri olmayan bir nitelik kaydırıcısı, sayfa yüklendikten sonra eklentinin betiği tarafından kaldırılır; bu yüzden başlığı bir an için parlayabilir. Bu CSS onu baştan gizler (Görünüm → Özelleştir → Ek CSS veya alt tema stil sayfanız):

/* HUSKY: hide empty taxonomy sliders before the script removes them */
.woof_container_slider:has(.woof_hide_slider) {
    display: none;
}

Ürünün kendisi bir aralığa sahipse

Bir kaydırıcı ürünleri ürün başına tek bir değerle bulur. Bir ürün bir aralığı kapsıyorsa (150–190 cm boylara uygun, 3–10 oyunculu), yerleşik bir "aralıklar çakışıyor" araması yoktur. İki uygulanabilir model:

  • Her biri kendi kaydırıcısına sahip iki meta alanı, örneğin players_min ve players_max. 4 oyunculu bir oyun arayan ziyaretçi birinci kaydırıcıyı 1–4'e, ikincisini 4–10'a ayarlar.
  • Her değer için bir terimi olan bir nitelik (150, 151 ... 190), uygun tüm terimler ürüne atanır ve nitelik bir kaydırıcı olarak gösterilir. Terimleri elle değil, toplu olarak atayın.

Kontrol listesi

  • Nitelik kaydırıcısı: genel nitelik, noktayla yazılmış ondalıklar, Varsayılan sıralama düzeni (Default sort order) ayarı Ad (sayısal) (Name (numeric)) ya da terimler sıraya sürüklenmiş, Filtreleme mantığı (Logic of filtering) VEYA (OR) olarak.
  • Meta kaydırıcısı: alan türü sayı (number), düz sayısal değerler, Aralık (Range) min^max olarak doldurulmuş, kesirli değerler için bir ondalık tür.
  • Çok sayıda farklı değer veya gerçek ölçümler: yüzlerce terimi olan bir nitelik yerine bir meta kaydırıcısı.
  • Yanlış kategorilerdeki kaydırıcılar: nitelik kaydırıcıları için Dinamik yeniden sayımı etkinleştir (Enable dynamic recount), meta kaydırıcıları için Boş terimleri gizle (Hide empty terms).

Bu adımlardan sonra bir kaydırıcı hâlâ yanlış değerler gösteriyorsa, niteliği veya meta anahtarını, birkaç örnek değeri ve sayfanın bağlantısını ekleyerek HUSKY destek forumunda sorun.