WP_Query orderby meta_value_num не работает

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

Ссылка на страницу находится здесь http://dev.poshwashlondon.co.uk/valeting.

Заранее спасибо!

2 ответа

Ссылка, которую вы указали, четко показывает порядок строк (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

Я знаю, что это старый вопрос, но, возможно, мой ответ кому-нибудь поможет.

Проблема здесь в том, что цены - это строки, как упоминалось @ 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

Другие вопросы по тегам