Я пытаюсь заказать WP_Query, начиная с метаполя _sale_price. Я пробовал использовать как order_by, meta_value, так и meta_value_num, но они оба возвращают сообщения в неправильном порядке (первые 20 сообщений расположены по порядку после что после более дорогих товаров появляются товары с более низкой стоимостью).
$args = массив( 'post_type' => 'продукт', 'заказ' => 'ASC', 'orderby' => 'meta_value', 'meta_key' => '_sale_price', 'posts_per_page' => -1, 'meta_query' => массив( множество( 'ключ' => '_sale_price', 'значение' => 0, 'сравнить' => '>', 'тип' => 'ЦИФР' ) ) ); $sale_books = новый WP_Query($args);

Я также попробовал собственный запрос, но он все равно неверен:
глобальный $wpdb; $querystr = " ВЫБЕРИТЕ $wpdb->сообщения.* ИЗ $wpdb->posts, $wpdb->postmeta ГДЕ $wpdb->posts.ID = $wpdb->postmeta.post_id И $wpdb->postmeta.meta_key = '_sale_price' И $wpdb->postmeta.meta_value > 0 И $wpdb->posts.post_status = 'опубликовать' И $wpdb->posts.post_type = 'продукт' ORDER BY $wpdb->postmeta.meta_value ASC"; и я попробовал привести значение ORDER BY CAST(mt1.meta_value AS SIGNED) ASC, но все равно не работает.
Это простые продукты

Вот что происходит, когда я повторяю номер индекса строки и get_post_meta($row->ID,'_sale_price',true) . Он нормально поднимается до строки 210, затем начинают появляться продукты с более низкими ценами:

Я решил эту проблему с помощью usort, но мне все равно интересно, почему это не работает:
функция cmp($a, $b) { $testa = floatval(get_post_meta($a->ID, '_sale_price', true)); $testb = floatval(get_post_meta($b->ID, '_sale_price', true)); вернуть $testa $testb; } usort($pageposts, "cmp");