Meta_Compare parece estar tratando los valores como cadenas en lugar de enteros como se esperaba
-
16-10-2019 - |
Pregunta
Intentando usar Meta_Compare Como se sugiere en el códice:
query_posts('meta_key=miles&meta_compare=<=&meta_value=22');
Aquí está mi código:
global $wp_query;
query_posts(
array_merge(
array(
'category__and' => $mycatsarray,
'meta_key' => 'price',
'meta_compare' => '>=',
'meta_value' => 8500000,
'orderby' => meta_value_num,
'order'=>DESC
),
$wp_query->query
)
);
Estoy usando array_merge para persistir la consulta original. Por lo tanto, no pude descubrir cómo usar la sintaxis sugerida ('& name = value') para Meta_Compare y Meta_Value. De todos modos, en mi código, el meta_value parece ser tratado como una cadena y no como un entero como se esperaba.
Aquí hay un ejemplo de algunos campos personalizados de precio típicos de mis publicaciones personalizadas:
- 8500000
- 600
- 15000
- 900
- 750
- 9000000
Si no es un problema de cadena, podría ser que WordPress esté ordenando (DESC) estos campos personalizados de la siguiente manera:
- 9000000
- 900
- 8500000
- 750
- 600
- 15000
Me gustaría que se les ordenara (DESC) de la siguiente manera:
- 9000000
- 8500000
- 15000
- 900
- 750
- 600
¿Estoy haciendo algo mal aquí?
Solución
Vea esta pregunta y mi respuesta allí query_posts -> usando meta_compare / donde el meta valor es menor o mayor o es igual ...
Básicamente para el propósito del valor de la meta comparación, siempre se trata como una cadena, porque se pasa como tal $wpdb->prepare()
método.