Я пытаюсь показать список услуг по цене. Я настроил пользовательский тип записи, настраиваемые поля и т. Д. Однако, когда я запускаю запрос на странице, самый дорогой сервис (100 фунтов стерлингов) отображается первым, а не последним … Я написал следующий запрос:
$services = new WP_Query(array(
'post_type' => 'service',
'tax_query' => array(
array(
'taxonomy' => 'service_type',
'field' => 'name',
'terms' => $post->post_name,
),
),
'meta_key' => 'price',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'meta_value_num',
'order' => 'ASC', ));
Ссылка на страницу здесь dev.poshwashlondon.co.uk/valeting.
Заранее спасибо!
Ссылка, которую вы указали, четко показывает порядок строк (100, 15, 20, 25 и т. Д.). Похоже, ваша проблема в том, что мета-значение, которое использует запрос, — это не число, а строка.
Вы можете попробовать это:
$services = new WP_Query(array(
'post_type' => 'service',
'tax_query' => array(
array(
'taxonomy' => 'service_type',
'field' => 'name',
'terms' => $post->post_name,
),
),
'meta_key' => 'price',
'meta_type' => 'NUMERIC',
'post_status' => 'publish',
'posts_per_page' => -1,
//'orderby' => 'meta_value_num',
'orderby' => 'meta_value_numeric',
'order' => 'ASC', ));
Вы можете посмотреть возможные «orderby» здесь:
https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
Я знаю, что это старый вопрос, но, возможно, мой ответ кому-нибудь поможет.
Проблема здесь в том, что цены — это строки, как упоминалось @ muka-gergely, поэтому сортировка будет алфавитной, что хорошо для строк (т. Е. Слов), но может быть неожиданным для чисел (например, 1, 3, 34, 4, 56, 6, и т. д., а не 1, 3, 4, 6, 34, 56, как вы можете ожидать).
Если вы хотите отсортировать числа по возрастанию, вы должны добавить 'meta_type'
на ваш запрос
$services = new WP_Query(array(
'post_type' => 'service',
'tax_query' => array(
array(
'taxonomy' => 'service_type',
'field' => 'name',
'terms' => $post->post_name,
),
),
'meta_key' => 'price',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'meta_value_num',
'meta_type' => 'NUMERIC', //HERE
'order' => 'ASC', ));
Возможные значения для 'meta_type'
«NUMERIC», «BINARY», «CHAR», «DATE», «DATETIME», «DECIMAL», «SIGNED», «TIME», «UNSIGNED»
Для большего: https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters