meta_compare no compara números enteros completos en WordPress

1 abr 2014, 09:18:37
Vistas: 4.43K
Votos: 0

He enviado un dato entero a través de un formulario a mi página de búsqueda personalizada. Obtengo valores correctamente si la entrada es de un solo carácter (ej. 1) pero si la entrada tiene múltiples caracteres (ej. 100) sigue comparando contra "1".

SI la entrada del usuario es 1 obtengo todos los posts con valor de campo personalizado Mayor que 1. pero si la entrada es 100 el resultado es el mismo.

¿Por qué está pasando esto?

Aquí está mi código:

$i_rate = $_GET["interest_rate"];

$bc_args = array(
    'post_type' => 'data',
    'data-category'=>'insurance-rate',
    'order' => 'DESC',
    'meta_key' => 'interest_rate',
    'meta_value' =>$i_rate,
    'meta_compare' => '>=',
    'orderby' => 'meta_value_num',
);

$sortedPosts = new WP_Query($bc_args);
3
Comentarios

¿No debería ser 'meta_value' =>$i_rate, 'meta_value_num' =>$i_rate,

User User
1 abr 2014 12:55:08

@magenta También lo intenté... pero no funciona de esa manera

rafsuntaskin rafsuntaskin
1 abr 2014 11:15:33

Iba a sugerir convertir a INT tu valor, pero parece que la respuesta marcada te lo resolvió.. :)

t31os t31os
1 abr 2014 11:30:53
Todas las respuestas a la pregunta 1
2
10

Podrías probar esto en su lugar:

$bc_args = array(
    'post_type'      => 'data',
    'data-category'  => 'tasa-seguro', // Traducido 'insurance-rate' a 'tasa-seguro'
    'order'          => 'DESC',
    'orderby'        => 'meta_value_num',
    'meta_query' => array(
        array(
            'key'     => 'interest_rate',
            'value'   => (int) $i_rate,
            'type'    => 'numeric',
            'compare' => '>='
        ),
    )
);

$sortedPosts = new WP_Query( $bc_args );

donde utilizamos el numeric type.

También deberías considerar usar filter_input en lugar de $_GET:

$i_rate = filter_input( INPUT_GET, 'i_rate', FILTER_SANITIZE_NUMBER_INT );

o la forma nativa con add_query_var / get_query_var.

Nota: data-category no es un parámetro nativo en la clase WP_Query().

1 abr 2014 09:48:49
Comentarios

Muchas gracias... funcionó justo como lo necesitaba... Sabía que había algún tipo de problema de conversión (casting) pero no sabía cómo solucionarlo.

Gracias

rafsuntaskin rafsuntaskin
1 abr 2014 11:04:58

Me alegra saber que te funcionó. Siempre puedes verificar el SQL generado con echo $sortedPosts->request; para asegurarte de que es lo que quieres.

birgire birgire
1 abr 2014 11:07:43