Ich habe eine Liste von Produkten mit einem Preis in einem benutzerdefinierten Feld, das als Text wie "2.50" oder "5.00" gespeichert ist, und ich zeige sie auf der Seite mit einer benutzerdefinierten Abfrage an, die nach dem Preis sortiert ist:
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 ) );
Dies funktioniert gut für die Preise, aber einige Preise sind "POA" und ich möchte sie zuletzt zeigen, jedoch die oben genannten Bestellungen so, dass "POA" zuerst angezeigt wird.
Gibt es eine Möglichkeit, dies zu ändern, oder einen schnellen Hack, mit dem ich das Array anschließend sortieren und die "POA" -Preise zuletzt setzen könnte?
'orderby' => 'meta_value_num',
zu'orderby' => 'meta_value_num meta_value',
meta_value meta_value_num
! Vielen Dank! Möchten Sie eine Antwort verfassen, damit ich darüber abstimmen kann?Antworten:
Das
OrderBy
Argument kann mehr als einen Parameter annehmen, daher bestand die Lösung in einer Änderung:zu:
quelle
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
Ich habe diese Lösung gefunden, indem ich Code von @bonger und /programming/18084199/wordpress-query-order-by-case-when kombiniert habe
Und es funktioniert gut.
Funktion
Vor der Abfrage
quelle