Estoy tratando de mostrar la lista de servicios por precio. Configuré el tipo de publicación personalizada y los campos personalizados, etc. Sin embargo, cuando ejecuto la consulta en la página, el servicio más caro (£ 100) aparece primero en lugar de último… La consulta que he escrito está a continuación:
$services = new WP_Query(array(
'post_type' => 'service',
'tax_query' => array(
array(
'taxonomy' => 'service_type',
'field' => 'name',
'terms' => $post->post_name,
),
),
'meta_key' => 'price',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'meta_value_num',
'order' => 'ASC', ));
Un enlace a la página está aquí dev.poshwashlondon.co.uk/valeting.
¡Gracias por adelantado!
muka.gergely
El enlace que proporcionó muestra claramente un orden de cadena (100, 15, 20, 25, etc.). Su problema parece ser que el valor meta que utiliza la consulta no es un número, sino una cadena.
Puedes probar esto:
$services = new WP_Query(array(
'post_type' => 'service',
'tax_query' => array(
array(
'taxonomy' => 'service_type',
'field' => 'name',
'terms' => $post->post_name,
),
),
'meta_key' => 'price',
'meta_type' => 'NUMERIC',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'meta_value_num',
'order' => 'ASC', ));
Puede ver los posibles “orderby” aquí:
https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
Sé que es una vieja pregunta, pero tal vez mi respuesta ayude a alguien.
El problema aquí es que los precios son cadenas como mencionó @muka-gergely, por lo que la clasificación será alfabética, lo cual está bien para cadenas (es decir, palabras), pero puede ser inesperado para números (por ejemplo, 1, 3, 34, 4, 56, 6, etc., en lugar de 1, 3, 4, 6, 34, 56 como cabría esperar naturalmente).
Si desea ordenar los números de menor a mayor, debe agregar 'meta_type'
a tu consulta
$services = new WP_Query(array(
'post_type' => 'service',
'tax_query' => array(
array(
'taxonomy' => 'service_type',
'field' => 'name',
'terms' => $post->post_name,
),
),
'meta_key' => 'price',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'meta_value_num',
'meta_type' => 'NUMERIC', //HERE
'order' => 'ASC', ));
Posibles valores para 'meta_type'
son ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’
Para más: https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
Las entradas que se encuentran en la página que vinculó parecen estar ordenadas como cadenas, no como números. Si no puede convertirlos en números antes de realizar la consulta, la consulta debe tener esto en cuenta.
– muka.gergely
29/09/2016 a las 16:00