WooCommerce yeni gelenler kategorisi nasıl kurulur ve güncel kalır
Mağazayı tarihe göre sıralamak bir yeni gelenler sayfası değildir. Gerçek bir product_cat terimi, üyeliği belirleyen bir kural ve süresi dolan ürünleri çıkaran zamanlanmış bir görev; hangi tarih alanının kullanılacağı ve tükenen ürünlerin en üstten nasıl düşürüleceği dahil.
Mağazayı tarihe göre sıralamak bir yeni gelenler sayfası değildir. Bugüne kadar yayımladığınız her şeyin sıralanmış bir görünümüdür. Ana menüye koyabileceğiniz, bir kampanyayı yönlendirebileceğiniz ve Google’ın dizine alabileceği bir WooCommerce yeni gelenler kategorisi istiyorsanız, kendi URL’si ve kendi üyelik listesi olan bir şeye ihtiyacınız var. Daha da önemlisi, ürünleri tekrar dışarı çıkaran bir şeye.
Bunun üç seviyesi var ve bunlar gerçekten farklı nesneler. Yazıların çoğu birincisini anlatır, işi çözülmüş sayar ve zor yarısının süre dolumu olduğundan hiç söz etmez.
Kısa cevap#
Bir WooCommerce yeni gelenler kategorisi, üyeliği bir kuralla belirlenen gerçek bir product_cat terimi olmalıdır: son 30 günde oluşturulan ürünler. Buna ek olarak, süresi dolan her ürünü kategoriden çıkaran otomatik bir görev gerekir.
- Sıralama bir kategori değildir. ?orderby=date adresine verilen bir bağlantı size yalnızca mağazanın tamamının tarihe göre sıralanmış bir görünümünü verir: kendine ait bir başlığı ya da içeriği yoktur, içinden hiçbir şeyin süresi dolmaz ve SEO eklentileri sıralanmış URL’yi kanonik olarak düz arşive geri döndürür.
- Kısa kodlar taksonomiye kadar gitmez. Product Collection bloğu ya da [products orderby=”date”] menüden bağlayabileceğiniz bir sayfa üretir; ama o sayfada gezinme yolu, ürün sayısı, kategori bileşeninde bir kayıt, katmanlı gezinme ve filtre blokları bulunmaz.
- Asıl sorun süre dolumudur. Gerçek bir product_cat terimi gezinme yolunu, sayıları, menüleri ve filtreleri geri getirir; ama doğru kalması için zamanlanmış günlük bir görevin ürünleri yayımlandıkça eklemesi ve pencereyi aştıkça çıkarması gerekir. Böyle bir görev yoksa New Arrivals, kataloğunuzun yavaş yavaş büyüyen bir kopyasına dönüşür.
- Tarih alanını dikkatle seçin. Kuralı oluşturulma tarihi üzerine kurun, asla değiştirilme tarihi üzerine kurmayın; fiyat düzenlemeleri, stok düşümleri ve toplu güncellemeler değiştirilme tarihini ileri atar. Pencereyi de yayın hızınıza göre boyutlandırın ki sayfa iki ila dört ekranlık ürün tutsun.
- Stokta olma koşulunu da ekleyin. En hızlı satan ürünler yeni ürünlerdir; stok durumunu üyelik kuralının parçası yaparsanız tükenen yenilikler en üst sıradan düşer, üstelik bunu sitenin tamamında stokta olmayan ürünleri gizlemek zorunda kalmadan yaparsınız.
Seviye 1: mağazayı tarihe göre sıralamak#
WooCommerce bunu zaten getiriyor. Katalog sıralama açılır listesinde, geçerli arşive ?orderby=date ekleyen En yeniye göre sırala seçeneği var. Sıralama, ürünün yayın tarihine göre azalan biçimde yapılır; eşitlik durumunda gönderi kimliği belirleyicidir. Doğrudan bu adrese bağlantı verebilirsiniz:
https://example.com/shop/?orderby=date
https://example.com/product-category/dresses/?orderby=dateHer arşivin bu şekilde açılmasını istiyorsanız, ayarı bir kez Görünüm → Özelleştir → WooCommerce → Ürün Kataloğu → Varsayılan ürün sıralaması altında yapın ve En yeniye göre sırala seçeneğini seçin. Bu, woocommerce_default_catalog_orderby seçeneğini yazar; koda gerek yok. Blok temalarda Özelleştir bağlantısı yönetim menüsünde bulunmayabilir; /wp-admin/customize.php adresini doğrudan açarsanız WooCommerce paneli yine oradadır.
Bu yöntem ücretsiz, anında ve gittiği yere kadar doğrudur. Olmadığı şey bir varış noktası olmaktır:
- Kendine ait içeriği yoktur.
?orderby=dateadresine bir başlık, bir giriş paragrafı ya da bir afiş veremezsiniz. Bu, farklı bir sıralama giymiş mağaza sayfasıdır. - Bu bir sorgu dizesidir, sayfa değildir. SEO eklentileri sıralanmış URL’leri genelde sıralanmamış arşive kanonik olarak bağlar ve bu doğru karardır; mağazanın altı sıralanmış kopyasının birbiriyle yarışmasını istemezsiniz. Ama bu, sıralanmış görünümün Google’ın sıralamaya alacağı bir şey olmadığı anlamına gelir.
- Hiç bitmez. Birinci sayfa yenidir. Dokuzuncu sayfa 2019 yılıdır. “Yeni gelen” ile “hâlâ katalogda” arasında bir sınır yoktur.
- Bir küme olarak filtrelenemez. Üst üste parametre yığmadan “£50 altındaki yeni gelenler” diyemezsiniz ve içinden bir ürünü hariç tutamazsınız.
Tek ihtiyacınız, geri dönen müşterilerin taze stoku fark etmesiyse burada durun. Hiçbir maliyeti yok ve işi görüyor.
Seviye 2: New Arrivals koleksiyonu ve products kısa kodu#
Bir üst adım, gerçek bir Sayfaya yerleştirdiğiniz bir görüntüleme bloğudur. Güncel WooCommerce’te bu, Product Collection bloğudur. Bloğu ekleyin ve bloğun koleksiyon seçicisinden New Arrivals seçeneğini işaretleyin. Varsayılan olarak son 7 günde oluşturulan ürünleri gösterir; bu pencere, ürün sayısı, sütun sayısı ve envanter durumu filtresiyle birlikte blok kenar çubuğundan düzenlenebilir.
Eski, bağımsız Newest Products bloğu halihazırda kullanıldığı her yerde çalışmaya devam ediyor; ancak WooCommerce 9.5 ürün ızgarası bloklarını yumuşak biçimde kullanımdan kaldırdı ve blok ekleyiciden gizledi, dolayısıyla yeni bir sayfada bu bloğu bulamazsınız. Yerini Product Collection aldı.
Klasik editörde ya da bir sayfa oluşturucuda çalışıyorsanız aynı işi kısa kod yapar:
[products limit="12" columns="4" orderby="date" order="DESC"]WooCommerce 3.2, [recent_products], [featured_products], [sale_products] ve birkaç kısa kodu daha, nitelik alan tek bir [products] altında birleştirdi. [recent_products] hâlâ çalışıyor, ama belgelerin anlattığı ve niteliklerin tamamını kabul eden kısa kod [products].
Artık bir URL’niz, bir başlığınız, bir girişiniz ve menüden bağlayabileceğiniz bir şeyiniz var. Hâlâ olmayan şey bir kategori. Bu ayrım kulağa geldiğinden daha önemli:
- Terim yok, dolayısıyla terim davranışı da yok. Gezinme yolu yok, ürün sayısı yok, kategori açılır listelerinde ya da kategori bileşeninde kayıt yok, Ürünler → Kategoriler listesinde hiçbir şey yok.
- Katmanlı gezinme ve filtre blokları işlemez. Nitelik filtreleri ürün arşivi sorgusu üzerinde çalışır. Bir Sayfanın içindeki kısa kod ızgarası ayrı bir sorgudur ve filtreler ona dokunmaz.
- Sayfalama sorunludur. Sayfa üzerindeki bir ızgara, Sayfadan bağımsız olarak sayfalanır ve temaların bunu ne kadar düzgün karşıladığı değişir.
- Sitedeki başka hiçbir şey bu kümeyi göremez. Feed dışa aktarıcıları, bir kategoriyle sınırlanmış indirim kuralları, ilgili ürün mantığı: bunların hepsi taksonomi terimlerini okur, burada ise terim yoktur.
Seviye 3: gerçek bir WooCommerce yeni gelenler kategorisi#
Üçüncü seçenek, New Arrivals adında sıradan bir product_cat terimidir; /product-category/new-arrivals/ adresinde durur ve ürünler gerçekten ona atanır. Yukarıdaki her şey geri gelir: gezinme yolu, sayılar, menüler, filtreler, sıralama açılır listesi ve kategori açıklamasına gerçek bir giriş yazma imkânı.
Oluşturmak on saniye sürer. Asıl sorun onu doğru tutmaktır. Haftada on iki ürün ekleyen ve bir kutuyu işaretlemeyi hatırlayan biri yaklaşık bir ay idare eder. Kimsenin beceremediği iş çıkarma işidir; yalnızca üye kazanan bir New Arrivals kategorisi sessizce “bugüne kadar sattığımız her ürün”e dönüşür, üstelik kötü sıralanmış hâlde. Bu, kimsenin boşaltmadığı bir indirim kategorisiyle aynı arıza biçimidir; kendini boşaltan bir WooCommerce indirim kategorisi nasıl kurulur yazısında ele almıştık.
Kimsenin anlatmadığı yarısı: süre dolumu#
Bir şeyin zamanlanmış olarak çalışması, kategorideki her ürüne bakması ve süresi dolanları çıkarması gerekir. Bunu kendiniz yazmak istiyorsanız dürüst sürümü şudur. Kodu temanızın functions.php dosyasına değil, küçük bir site eklentisine koyun ki tema değişikliğinden sağ çıksın.
<?php
/**
* Plugin Name: New Arrivals Sweeper
* Description: Keeps a "new-arrivals" product category limited to the last 30 days.
*/
const MY_NA_SLUG = 'new-arrivals';
const MY_NA_DAYS = 30;
add_action( 'init', function () {
if ( ! wp_next_scheduled( 'my_refresh_new_arrivals' ) ) {
wp_schedule_event( time(), 'daily', 'my_refresh_new_arrivals' );
}
} );
register_deactivation_hook( __FILE__, function () {
wp_clear_scheduled_hook( 'my_refresh_new_arrivals' );
} );
add_action( 'my_refresh_new_arrivals', function () {
$term = get_term_by( 'slug', MY_NA_SLUG, 'product_cat' );
if ( ! $term ) {
return;
}
$cutoff = gmdate( 'Y-m-d H:i:s', time() - ( MY_NA_DAYS * DAY_IN_SECONDS ) );
// Products that SHOULD be in the category.
$fresh = get_posts( array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
'date_query' => array(
array( 'after' => $cutoff, 'column' => 'post_date_gmt' ),
),
) );
// Products that ARE in the category right now.
$current = get_posts( array(
'post_type' => 'product',
'post_status' => 'any',
'posts_per_page' => -1,
'fields' => 'ids',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $term->term_id,
'include_children' => false,
),
),
) );
wp_defer_term_counting( true );
foreach ( array_diff( $fresh, $current ) as $id ) {
wp_set_object_terms( $id, array( (int) $term->term_id ), 'product_cat', true );
}
foreach ( array_diff( $current, $fresh ) as $id ) {
wp_remove_object_terms( $id, array( (int) $term->term_id ), 'product_cat' );
}
wp_defer_term_counting( false );
} );Bu çalışan bir betiktir ve düzenli trafiği olan bir sitede birkaç yüz ürünlük bir katalog için yeterlidir. Neyi kabul ettiğinizi bilin:
- WP-Cron trafiğe ihtiyaç duyar. Sessiz bir site günlük olayı günlerce tetiklemeyebilir. Zamanlama önemliyse WP-Cron’u devre dışı bırakın ve
wp-cron.phpdosyasını gerçek bir sistem cron’undan çağırın. posts_per_page => -1ölçeklenmez. Birkaç bin ürüne geldiğinizde bunu gruplar hâlinde işlemek isteyeceksiniz ve o noktada artık bir kuyruk yazıyorsunuz demektir.- Sizin yaptığınız atamalarla kendi yaptığı atamaları ayırt edemez. Öne çıkan bir ürünü elle New Arrivals kategorisine koyarsanız, bir sonraki tarama onu çıkarır. Neyi kimin atadığına dair bir kayıt yoktur; bunu kendiniz saklamanız gerekir.
- Çözünürlük günlüktür.
save_post_productkancasına da bağlanmazsanız, bu sabah yayımlanan bir ürün yarına kadar görünmeyebilir. - Çıkarma işlemi bir ürünü kategorisiz bırakabilir. New Arrivals bir üründeki tek kategoriyse, o ürün kategorisiz görünür. Taramayı canlı bir katalogda çalıştırmadan önce bunu kontrol edin.
Aynı biçimdeki sorun, yani bir kez uygulanan değil sürekli yeniden uygulanması gereken kurallar, kurallara göre ürünleri bir WooCommerce kategorisine otomatik ekleme yazısında ele alınıyor. Bu işi şu anda toplu düzenleme ekranında elle yapıyorsanız, ürünleri kategorilere toplu atama yazısı bunun neden sürekli geri geldiğini anlatıyor.
Peki hangi tarihi kullanmalısınız?#
Yeni gelenler sayfaları sessizce burada bozulur; bu yüzden ödünleşimi açıkça yazmakta fayda var.
Oluşturulma tarihi#
WooCommerce’in date_created değeri, ürün gönderisinin post_date değeridir: ürün kaydının WordPress’te var olduğu an. Stok geldikçe ürünleri elle ekleyen bir mağaza için bu tam olarak doğrudur ve bunu kullanmalısınız.
Taşınmış ya da bir içe aktarıcıyla beslenen bir mağaza içinse doğru değildir. Geçen salı başka bir platformdan 4,000 ürün taşıdıysanız, o 4,000 ürünün tamamının oluşturulma tarihi geçen salıdır. New Arrivals sayfanız sonraki 30 gün boyunca kataloğunuzun tamamıdır, sonrasında ise boştur. Daha kötüsü, bazı içe aktarma araçları her eşitlemede gönderi tarihini yeniden yazar; böylece ürünler pencereye tekrar tekrar girer.
İşin içinden çıkmanın üç yolu var, iş yüküne göre sıralı:
- İçe aktarırken gerçek tarihi eşleyin. CSV içe aktarıcılarının çoğu gönderi tarihini bir kaynak sütundan almanıza izin verir. Eski platformunuz bir oluşturulma tarihi alanı dışa aktardıysa onu eşleyin, sorun kalıcı olarak ortadan kalkar.
- Pencerenin geçmesini bekleyin. Kategoriyi taşımadan 30 gün sonra açın. Kaba, ücretsiz ve yalnızca bir kez taşıma yapıyorsanız işe yarar.
- Kendi alanınızı kullanın. Bir ürün gerçekten yayına girdiğinde bir
_first_stockedmeta değeri yazın ve eşleştirmeyi gönderi tarihi yerine bu değer üzerinden yapın. Tekrarlanan içe aktarmalardan sağ çıkan tek seçenek budur; ürünler bir tedarikçi feed’inden geliyorsa seçmeniz gereken de budur.
Değiştirilme tarihi olmaz#
Cazip gelir, çünkü “yakın zamanda güncellendi” kulağa “yakın zamanda eklendi” gibi gelir. Öyle değildir. Bir fiyat değişikliği, bir stok düşümü, açıklamadaki bir yazım hatasının düzeltilmesi ya da meta alanlarına dokunan toplu bir eklenti; hepsi post_modified değerini ileri atar. 2021 tarihli, fiyatını bu sabah düzelttiğiniz bir ürün yeni gelen olup çıkar. Kuralı asla bunun üzerine kurmayın.
“Yeni” ne kadar sürer?#
Pencereyi yuvarlak bir sayıya göre değil, yayın hızınıza göre seçin. Tutarlı biçimde iki ila dört ekran derinliğinde bir sayfa hedefleyin. Haftada on ürün ekliyorsanız 30 gün size kabaca 40 ürün verir; sağlam bir sayfa eder. Ayda iki ürün ekliyorsanız 30 gün size iki ürünlük bir sayfa verir; bu, hiç sayfa olmamasından daha kötü bir deneyimdir ve dizine alınmak için zayıf bir adaydır. Pencereyi 90 güne çıkarın ya da sayfayı hiç kurmayın.
Tükenen yeniliklerin en üstte oturmasını engelleyin#
Tarihe dayalı bir sayfanın bakımsız görünmesine yol açan asıl arıza budur. En hızlı tükenen ürünler yeni ürünlerdir. Tarihe göre sıralanmış bir sayfa en yeni olanı en başa koyar. Böylece New Arrivals sayfanızın en tepesi satamayacağınız ürünlerle dolar ve müşterinin en taze stokunuza dair ilk izlenimi, soluklaştırılmış kartlardan oluşan bir sıra olur.
Gerçek bir kategori olduğu için gerçek bir çözümünüz var: stoku yalnızca sıralamanın değil, üyelik kuralının parçası yapın. Kural, AND ile birleştirilmiş iki koşula dönüşür: son 30 günde oluşturulmuş ve stok durumu Stokta. Tükenen bir ürün kategoriden düşer; pencere içinde yeniden stoklanırsa geri gelir. Elle yazılmış betiklerin genelde kaçırdığı kısım bu sonuncusudur, çünkü kuralın yalnızca günlük bir zamanlayıcıda değil, stok değiştiğinde de yeniden değerlendirilmesi gerekir.
Dürüst olmak gerekirse alternatifler şunlar:
| Yaklaşım | Etki | Dezavantajı |
|---|---|---|
| WooCommerce → Ayarlar → Ürünler → Envanter → Stokta yok görünürlüğü | Stokta olmayan ürünleri katalogdan ve aramadan gizler | Site genelinde ya hep ya hiç; üstelik ürün sayfası doğrudan bağlantıyla yine de erişilebilir kalır |
| Stokta olmayanları arşivin sonuna itmek | Ürün erişilebilir kalır, yalnızca en sona düşer | Bir sorgu düzenlemesi ya da bir eklenti gerekir; bkz. stokta olmayan ürünleri en sonda gösterme |
| Stoku kategori kuralının parçası yapmak | Yalnızca bu tek kategoriyle sınırlıdır | Yalnızca günlük değil, stok değiştiğinde de yeniden değerlendirme gerektirir |
New Arrivals sayfanız e-posta kampanyalarından bağlantı verdiğiniz sayfaysa doğru cevap üçüncüsüdür. Mağazanın geri kalanında stokta olmayan ürünler genelde görünür kalmalıdır.
Betiğin bakımını üstlenmek istemiyorsanız: Smart Categories#
Açık olalım: bu bizim eklentimiz. Yukarıdaki kod ihtiyacınızı karşılıyorsa yukarıdaki kodu kullanın; ücretsiz ve sizin.
Smart Categories for WooCommerce, gerçek bir product_cat terimine bir kural kümesi bağlar; sonuç, Seviye 3’te anlatılan nesnenin aynısıdır: sıradan bir arşivi, sayıları, gezinme yolu ve menü davranışı olan sıradan bir kategori. Bu sayfa için kural, tek bir ALL OF grubundaki iki koşuldur:
- Oluşturulma tarihi — son 30 gün içinde. Gönderi tarihi size yalan söylüyorsa, kendi
_first_stockedanahtarınızla Özel alan eşleştiricisini kullanın. - Stok durumu — Stokta değerine eşit. Tükenen yenilik sayfadan çıkar, yeniden stoklandığında geri döner.

Süre dolumunu günlük tarama halleder. Ürünler oluşturulduğunda ya da güncellendiğinde, fiyat veya stok değiştiğinde yeniden değerlendirilir; buna ek olarak günde bir kez hepsi birden değerlendirilir. 30 günlük çizgiyi geçen ürünleri yakalayan da budur, çünkü süresinin dolduğu gün o üründe hiçbir şey değişmemiştir. Eşleştirme, sayfa yüklenirken değil, arka planda Action Scheduler üzerinden gruplar hâlinde çalışır. Elle yaptığınız atamalar korunur: eklenti kendi oluşturduğu üyelikleri kaydeder ve yalnızca onları kaldırır; yukarıdaki betiğin sınırı da buydu.
Kuralı yazarken, kaydetmeden önce eşleşen ürünleri ve sayıyı görebilirsiniz. Bu özellik büyük ölçüde, 30 günlük pencerenizin dört ürün döndürdüğünü sayfayı yayımladıktan sonra değil, önce fark edin diye var.

Oluşturulma tarihi, Stok durumu ve Özel alan eşleştiricisinin üçü de wordpress.org üzerindeki ücretsiz sürümde yer alır; kategori, kural ya da ürün sayısında bir üst sınır yoktur. Bu yazıdaki hiçbir şey ücretli sürümü gerektirmez.
Bunların hiçbirinin çözmediği şeyler#
Bir yeni gelenler kategorisi önce bir mağazacılık sayfası, sonra bir SEO sayfasıdır; sınırın tam olarak nerede olduğunu net söylemekte fayda var.
- Meta başlıkları ve açıklamaları. Hiçbir kategori otomasyonu aracı bunları yazmaz, bizimki de dahil. Bu iş Yoast, Rank Math ya da SEOPress’in işidir; New Arrivals için meta bilgilerini bir kez elle yazmalısınız.
- Zayıf sayfa riski. Üyeliği her 30 günde bir tamamen dönen ve her seferinde bir avuç ürün barındıran bir kategori, sıralaması zor bir sayfadır ve hiç dizine alınmayabilir. WooCommerce kategori sayfaları neden dizine alınmıyor yazısı Google’ın bu sayfalarla gerçekte ne yaptığını anlatıyor. New Arrivals’ı, mağazanızı zaten tanıyan kişiler için bir sayfa olarak görün.
- Yönlendirmeler. Bunun etrafında kategori yapınızı yeniden düzenliyorsanız, yönlendirmeler ayrı bir araçla yapılan ayrı bir iştir: bir yönlendirme eklentisi ya da bir sunucu kuralı.
Kısa hâli: müşterilerin yalnızca taze stoku bulmasını istiyorsanız ?orderby=date ücretsizdir ve bir dakika sürer. Bağlantı verebileceğiniz, biçimlendirebileceğiniz ve trafik gönderebileceğiniz bir sayfaya ihtiyacınız varsa gerçek bir kategori kurun ve ürünleri oradan neyin çıkaracağına daha ilk gün karar verin; çünkü bir New Arrivals sayfası ile kataloğunuzun yavaş yavaş büyüyen bir kopyası arasındaki farkı o karar belirler.
