Saya memiliki daftar produk, masing-masing dengan harga di bidang khusus yang disimpan sebagai teks seperti "2.50" atau "5,00" dan saya menampilkannya di halaman dengan permintaan khusus yang diurutkan berdasarkan harga:
if(!$wp_query) {
global $wp_query;
}
$args = array(
'meta_key' => 'price',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
query_posts( array_merge( $args , $wp_query->query ) );
Ini berfungsi dengan baik untuk harga, tetapi beberapa harga adalah "POA" dan saya ingin menunjukkan kepada mereka yang terakhir, namun pesanan di atas sedemikian rupa sehingga "POA" ditampilkan terlebih dahulu.
Apakah ada cara untuk mengubah ini, atau peretasan cepat yang dapat saya gunakan untuk mengurutkan array setelahnya dan menempatkan harga "POA" terakhir?
'orderby' => 'meta_value_num',
ke'orderby' => 'meta_value_num meta_value',
meta_value meta_value_num
,! Terima kasih! Apakah Anda ingin menulis jawaban sehingga saya dapat memilihnya?Jawaban:
The
OrderBy
Argumen dapat mengambil lebih dari satu parameter sehingga solusinya adalah untuk perubahan:untuk:
sumber
ORDER BY CASE WHEN wp_postmeta.meta_value RLIKE '^[0-9]' THEN '' ELSE wp_postmeta.meta_value END ASC, wp_postmeta.meta_value+0 ASC
Saya menemukan solusi ini dengan menggabungkan kode oleh @bonger dan /programming/18084199/wordpress-query-order-by-case-when
Dan itu bekerja dengan baik.
Fungsi
Sebelum Query
sumber