meta_compare no compara números enteros completos en WordPress
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);

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()
.

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
