pre_get_postsFiltreyi 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_priceanahtarı 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_postfiltreyi 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_queryve tax_queryher zaman bir array( array() )çok diziyi birleştirdikleri gibi. İkincisi - cevabımda belirtildiği gibi - meta_value_numsayı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 orderde ASC ve DESC yön. Bu mümkün değil. Boşluk sınırlayıcı yalnızca çalışır orderbyve birinci ASCve ikincisini sıralamasını söyleyemezsiniz DESC. Bunun posts_clausesiçin filtre var.
meta_value_numgiriş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 DESCo üzerinde sıralar öyle mi meta_valueiçinde ASCve datede DESCbunun işe yaradığını söyleyebilirim kadarıyla.
