pre_get_posts
Filtreyi kullanarak yerleşik WP aramasını değiştiriyorum, kullanıcının gönderileri (bir sürü özel gönderi türü dahil) farklı alanlara göre sıralamasını sağlıyorum.
Yine de yaşadığım sorun, WP'ye meta değerine göre sıralama yapmam gerektiğini söylediğimde, bu meta değer kümesine sahip olmayan tüm gönderileri hariç tutacağı. Bu, "Gönderiler" "Fiyat" ayarına sahip olmadığından "Öğeler" ayarından "Fiyat" deyince "Tarih" den "Tarih" e değiştirirseniz, sonuçların sayısının değişmesine neden olur.
İstediğim şey bu değil, bu yüzden TÜM gönderileri dahil etmenin bir yolu olup olmadığını - sıraladığım meta değerine sahip olmayanlar bile - ve birinin son değeri olmayanları koyduğunu bilmek istiyorum.
Birden fazla alanda nasıl sıralanacağını biliyorum ama bu yardımcı olmuyor.
Teşekkürler
Görünüşe göre bu soru ile sadece ben değilim: wp_query args içinde belirli meta_key hem de & olmadan gönderileri dahil etme yolu? ama orada çözüm yok.
Güncelleştirme
Cevabı denedim, fakat doğru anladıysam, şu anda elimde olanı bulamadım:
<?php
function my_stuff ($qry) {
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
$qry->set('orderby', 'meta_value date'); # Sorting works with meta_value as well as meta_value_num - I've tried both
$qry->set('order', 'ASC DESC');
$qry->set('meta_key', 'item_price');
}
Meta değeri bir sayıdır (adından da anlaşılacağı gibi bir fiyat depolamak için kullanılır)
Güncelleme 2
Sipariş öğelerini yorumladım ve şimdi sahip olduğum tek şey bu:
<?php
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
Bu kodla birlikte sorgu, item_price
anahtarı olmayan ve hiçbir yayının olmadığı tüm gönderileri döndürüyor gibi görünmektedir . IE sorunu şimdi tersine döndü.
Sipariş kodunu da eklersem 0 sonuç alırım.
Düzenleme: ... üç yıl sonra ... : PI yine bu sorunu yaşadı. Verilen tüm cevapları denedim, hiçbiri işe yaramadı. Bazı insanların neden çalıştıklarını düşündüklerinden emin değilim ama en azından benim için çalışmıyorlar.
Sona erdiğim çözüm save_post
filtreyi kullanmak - tüm gönderilerin sıralamak istediğim özel alana sahip olduğundan emin olmak. Biraz can sıkıcı, bunu yapmak zorundayım, ancak erken yaptığınız sürece sorun yaşamayacaksınız.
Bu durumda, yazılara bir "görünüm sayacı" oluşturuyordum ve kullanıcıların en çok okunan yayınları sıralayabilmelerini istedim. Yine, görüntüleme sayısı sıralanırken hiç görülmemiş yayınlar (sanırım pek olası değil - ama yine de) kayboldu. Tüm yayınların görüntüleme sayısının olduğundan emin olmak için bu kod parçasını ekledim:
add_action('save_post', function ($postId) {
add_post_meta($postId, '_sleek_view_count', 0, true);
});
meta_query
ve tax_query
her zaman bir array( array() )
çok diziyi birleştirdikleri gibi. İkincisi - cevabımda belirtildiği gibi - meta_value_num
sayılar için kullanmanız gerekir . Gerçekte tanımlanması gerekebilir meta_value_num
(bkz. WP_Query
-Codex sayfa girişi). Son, bu kadar mantıklı değil order
de ASC
ve DESC
yön. Bu mümkün değil. Boşluk sınırlayıcı yalnızca çalışır orderby
ve birinci ASC
ve ikincisini sıralamasını söyleyemezsiniz DESC
. Bunun posts_clauses
için filtre var.
meta_value_num
girişlerinizin gerçek sayılar olduğundan emin olun . Çok sık görülen biri, birisinin bir rakam olduğunu söyler, fakat aslında onu veritabanında bir dize olarak kaydeder.
ASC DESC
o üzerinde sıralar öyle mi meta_value
içinde ASC
ve date
de DESC
bunun işe yaradığını söyleyebilirim kadarıyla.