WP_Query сортировка по нескольким метаполям и произвольным полям

28 авг. 2017 г., 16:38:17
Просмотры: 18.7K
Голосов: 8

Как отсортировать запрос по нескольким метаполям и произвольным полям?

Вот мой код:

$args = array
    (
        'post_type' => 'listing',
        'posts_per_page' => -1,
        'tax_query' => array
        (
            array
            (
                'taxonomy' => 'listing_category',
                'field' => 'slug',
                'terms' => urldecode($category)
            ),
            array
            (
                'taxonomy' => 'location',
                'field' => 'slug',
                'terms' => urldecode($location)
            )
        ),

        //*** ЭТО НЕ РАБОТАЕТ
        'meta_query'    => array
        (
            array(
                'key'     => 'listing_status',
                'orderby' => 'meta_value',
                'order' => ASC,
            ),
            array(
                'key'     => 'listing_total_rank',
                'orderby' => 'meta_value',
                'order' => DESC,
            ),
            array(
                'key'     => 'listing_free_date',
                'orderby' => 'meta_value',
                'order' => ASC,
            ),
            array(
                'key'     => 'title',
                'orderby' => 'meta_value',
                'order' => ASC,
            ),
        ),
        //***
    );

$listings = new WP_Query( $args );

Часть с 'meta_query' в этом коде не работает.

1
Комментарии

Отмечу, что этот запрос будет довольно медленным/ресурсоемким

Tom J Nowell Tom J Nowell
28 авг. 2017 г. 17:56:45
Все ответы на вопрос 1
0
19

Вы используете meta query без указания значения. Такой подход применяется для запроса записей, а не для их сортировки.

Использование именованных мета-запросов

Для сортировки записей по различным мета-данным вы можете дать своим мета-запросам имена, а затем использовать их для установки порядка. Вот простой пример:

$args = array(
    'meta_query' => array(
        'relation' => 'AND',
        'query_one' => array(
            'key' => 'key_one',
            'value' => 'value_one', // Опционально
        ),
        'query_two' => array(
            'key' => 'key_two',
            'compare' => 'EXISTS', // Опционально
        ), 
    ),
    'orderby' => array( 
        'query_one' => 'ASC',
        'query_two' => 'DESC',
    ),
);

Вы можете ознакомиться с этим разделом страницы codex для WP_Query(), чтобы лучше понять сортировку записей.

28 авг. 2017 г. 17:04:13