meta_compare не сравнивает целое число полностью

1 апр. 2014 г., 09:18:37
Просмотры: 4.43K
Голосов: 0

Я передаю целочисленные данные через форму на свою пользовательскую страницу поиска. Значения правильно обрабатываются, если ввод состоит из одного символа (например, 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);
3
Комментарии

Не должно ли быть 'meta_value' =>$i_rate заменено на 'meta_value_num' =>$i_rate,

User User
1 апр. 2014 г. 12:55:08

@magenta Я тоже пробовал это... но так не работает

rafsuntaskin rafsuntaskin
1 апр. 2014 г. 11:15:33

Собирался предложить приведение к INT для вашего значения, но похоже, что отмеченный ответ уже решил проблему.. :)

t31os t31os
1 апр. 2014 г. 11:30:53
Все ответы на вопрос 1
2
10

Вы можете попробовать такой вариант:

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

1 апр. 2014 г. 09:48:49
Комментарии

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

Спасибо

rafsuntaskin rafsuntaskin
1 апр. 2014 г. 11:04:58

Рад, что это сработало для вас. Вы всегда можете проверить сгенерированный SQL с помощью echo $sortedPosts->request;, чтобы убедиться, что это именно то, что вам нужно.

birgire birgire
1 апр. 2014 г. 11:07:43