Tenho uma lista de produtos, cada um com um preço em um campo personalizado armazenado como texto como "2,50" ou "5,00" e estou exibindo-os na página com uma consulta personalizada que classifica pelo preço:
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 ) );
Isso funciona bem para os preços, mas alguns são "POA" e eu gostaria de mostrá-los por último, no entanto, os pedidos acima são feitos de maneira que "POA" seja exibido primeiro.
Existe alguma maneira de alterar isso ou um hack rápido que eu poderia usar para classificar a matriz posteriormente e colocar os preços de "POA" por último?
'orderby' => 'meta_value_num',
para'orderby' => 'meta_value_num meta_value',
meta_value meta_value_num
! Obrigado! Deseja escrever uma resposta para que eu possa votar?Respostas:
O
OrderBy
argumento pode levar mais de um parâmetro, portanto a solução foi alterada:para:
fonte
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
Encontrei esta solução combinando o código @bonger e /programming/18084199/wordpress-query-order-by-case-when
E isso funciona bem.
Função
Antes da consulta
fonte