Tengo una lista de productos, cada uno con un precio en un campo personalizado almacenado como texto como "2.50" o "5.00" y los estoy mostrando en la página con una consulta personalizada que se clasifica por el precio:
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 ) );
Esto funciona bien para los precios, pero algunos precios son "POA" y me gustaría mostrarlos al final, sin embargo, los pedidos anteriores de tal manera que "POA" se muestra primero.
¿Hay alguna forma de alterar esto, o un truco rápido que podría usar para ordenar la matriz después y poner los precios "POA" al final?
'orderby' => 'meta_value_num',
a'orderby' => 'meta_value_num meta_value',
meta_value meta_value_num
! ¡Gracias! ¿Quieres escribir una respuesta para que pueda votarla?Respuestas:
El
OrderBy
argumento puede tomar más de un parámetro, por lo que la solución fue cambiar:a:
fuente
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
Encontré esta solución combinando código de @bonger y /programming/18084199/wordpress-query-order-by-case-when
Y funciona bien.
Función
Antes de la consulta
fuente