Mam listę produktów, z których każda zawiera cenę w polu niestandardowym zapisanym jako tekst, taki jak „2,50” lub „5,00”, i wyświetlam je na stronie za pomocą niestandardowego zapytania sortowanego według ceny:
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 ) );
Działa to dobrze w odniesieniu do cen, ale niektóre ceny to „POA” i chciałbym je pokazać na końcu, jednak powyższe zamówienia w taki sposób, aby „POA” był wyświetlany jako pierwszy.
Czy jest jakiś sposób, aby to zmienić, lub szybki hack, którego mógłbym użyć, aby posortować tablicę później i umieścić ceny „POA” na końcu?
'orderby' => 'meta_value_num',
na'orderby' => 'meta_value_num meta_value',
meta_value meta_value_num
,! Dzięki! Czy chcesz napisać odpowiedź, abym mógł głosować?Odpowiedzi:
OrderBy
Argument może wziąć więcej niż jeden parametr więc rozwiązaniem było zmianą:do:
źródło
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
Znalazłem to rozwiązanie, łącząc kod przez @bonger i /programming/18084199/wordpress-query-order-by-case-when
I działa dobrze.
Funkcjonować
Przed zapytaniem
źródło