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ı | |
|---|---|---|
| Veri | Genel 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ırayla | Gerç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 terim | Aralık (Range) seçeneğinde elle ayarlanır |
| Başlangıç/bitiş sayı kutuları | Hayır | Evet, Girişleri göster (Show inputs) |
| Metin ölçekleri (Yumuşak, Orta, Sert) | Evet | Hayır, yalnızca sayılar |
| Varyasyonlu ürünler | Ürünün nitelik terimlerine göre bulunur | Yalnı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
- 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. - 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.
- 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.
1hepsini gösterir,2her ikincisini,-1uç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ı.
- 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 cmgibi 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.5değerinin slug'ı 6 sayılan6-5'tir ve WordPress slug oluştururken baştaki eksiyi kaldırır, bu yüzden-33 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,9adlı bir terim1ve9olmak üzere iki etikete dönüşür ve ondan sonraki her konum yanlış terime işaret eder. Bu tür terimleri1.9olarak 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:
- 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.
- 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.
- Alanın ek seçeneklerini açın ve Aralık (Range) alanını
min^maxbiçiminde doldurun, örneğin10^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. - 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üzden1,250.51 olarak,1250,5ise 1250 olarak karşılaştırılır. - Yıllar:
1990^2026gibi bir aralık, adım1ve 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_minveplayers_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^maxolarak 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.