meta_compare не сравнивает целое число полностью
Я передаю целочисленные данные через форму на свою пользовательскую страницу поиска. Значения правильно обрабатываются, если ввод состоит из одного символа (например, 1), но если ввод содержит несколько символов (например, 100), сравнение всё равно происходит только с "1".
Если пользователь вводит 1, я получаю все записи с пользовательским полем, значение которого больше 1. Но если ввод равен 100, результат остаётся таким же.
Почему так происходит?
Вот мой код:
$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);

Вы можете попробовать такой вариант:
$bc_args = array(
'post_type' => 'data',
'data-category' =>'insurance-rate',
'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 );
где мы используем числовой (numeric
) type
.
Также стоит рассмотреть использование filter_input
вместо $_GET
:
$i_rate = filter_input( INPUT_GET, 'i_rate', FILTER_SANITIZE_NUMBER_INT );
или нативный способ с add_query_var / get_query_var
.
Примечание: data-category
не является нативным параметром в классе WP_Query()
.

Спасибо большое... это сработало именно так, как мне было нужно... Я знал, что есть какая-то проблема с приведением типов, просто не знал, как её решить.
Спасибо
