WordPress: PHP: İstenilen sonuçlar için bir kategori içinde yuvalanmış bir sıralama yapmak için nasıl

2 Cevap php

There is a plugin that I am trying to adapt for my meta_tags for use with WordPress. It is called Categories by Title by http://www.mikesmullin.com.

Ne elde etmek çalışıyorum iç içe bir tür. Üç meta_keys var. Bir seçim-no, aylık serbest ve yıllık bırakın. Ben serbest yıllık (asc) tarafından kendi kategorisinde mesajları sıralamak istiyorum, bırakın-ay (artan), daha sonra seçim-hayır (artan). Olur Örneğin: 1955 10 seçim-no-1, 1956 10 böylece seçme-no-2, 1956 10 seçim-no-5, ve.

Ben bırakma-yıl, ancak, sadece listelenen son meta_key sıralar, kodu olarak var.

İşte kodudur.

add_action('pre_get_posts','sort_categories_by_title');

function sort_categories_by_title($x) {
if(is_category()) {
    $x->query_vars['orderby'] = 'meta_value';
    $x->query_vars['meta_key'] = 'selection-no';
    $x->query_vars['meta_key'] = 'release-month';
    $x->query_vars['meta_key'] = 'release-year';
    $x->query_vars['order'] = 'asc';
}
}

Herhangi bir yardım büyük mutluluk duyacağız. Teşekkür ederim.

2 Cevap

usort bakabilirsiniz. Her öğe içine bakmak ve sipariş etmek ne seçebileceğiniz bir karşılaştırma işlevi kaynağı.

Sizin örnekte, bunu her zaman $x->query_vars['meta_key'] Eğer önceki değerin üzerine, böylece sadece bir seçim seçenek olarak son meta_key ekliyoruz.

Bu WordPress üstüne sadece tek bir meta_key / meta_value karşılaştırma çekerek destekler. Eğer posts_where_paged daha karşılaştırmalar eklemek ve posts_orderby ihtiyacınız fıkra ile sipariş oluşturmak için filtreleme olmalıdır sonra olduğunuzu daha karmaşık karşılaştırma almak için. Bunu gerçekleştirmek için ham SQL sorgusu yazma temel bir bilgi gerekir.

Siz de verilerinizi yeniden yapılanma ve gerçek bir tarih biçimine de bırakma-tarih koyarak ve meta_value dize biçimini alır ve bunun üzerine sıralama işlemleri dayalı doğru tarih yapmak için bir tarih alanı olarak döküm isleminden kullanmayı düşünebilirsiniz.