Несколько произвольных полей для 'orderby' в 'WP_Query'

20 дек. 2016 г., 23:09:29
Просмотры: 16.9K
Голосов: 6

Я пытаюсь отсортировать записи блога сначала по полю 'city', а затем по полю 'street_name' внутри каждого города. Не получается добиться правильной сортировки по алфавиту для названий улиц. Я использую WP_Query:

                <?php
                $args = array(
                    'post_type'=> 'property', // Тип записи: недвижимость
                    'meta_query' => array( // Запрос по мета-полям
                                array(
                                    'relation' => 'AND' , // Логическое И
                                    array(
                                        'meta_key' => 'city', // Ключ поля: город
                                        'orderby' => 'meta_value', // Сортировка по значению
                                        'order' => 'ASC' // По возрастанию
                                    ),
                                    array(
                                        'meta_key' => 'street_name', // Ключ поля: название улицы
                                        'orderby' => 'meta_value', // Сортировка по значению
                                        'order' => 'ASC' // По возрастанию
                                    ),
                                )

), Есть идеи?

0
Все ответы на вопрос 4
2

meta_query и orderby — это отдельные параметры, которые вы просто объединяете в массив. Вам нужно сначала задать один, затем другой.

Например:

<?php
$args = array(
    'post_type'     => 'property',
    'meta_query'    => array(
        array(
            'relation' => 'AND',
            'city_clause' => array(
                'key'       => 'city',
                'compare'   => 'EXISTS',
            ),
            'street_clause' => array(
                'key'       => 'street_name',
                'compare'   => 'EXISTS',
            ),
        )
    )
    'orderby' => array(
        'city_clause'       => 'desc',
        'street_clause'     => 'desc',
    )
)
?>

https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters

21 дек. 2016 г. 01:46:23
Комментарии

Спасибо, @Nath! Я попробовал это сделать, но у меня всё равно не получается отсортировать названия улиц по алфавиту...

bhood bhood
21 дек. 2016 г. 15:43:30

@bhood Хорошо, я обновил свой ответ, чтобы использовать явные индексы массива, на которые ссылается параметр orderby. Проверь, сработает ли это.

ngearing ngearing
22 дек. 2016 г. 01:05:12
1

Понадобилось некоторое время, чтобы разобраться, как сортировать по числовым значениям с несколькими мета-ключами, поскольку нельзя просто использовать orderby meta_value_num. Вместо этого нужно указать тип numeric в meta_query. Это рабочий код из продакшена.

    $meta_query = array(
        'relation' => 'AND',
        'query_one' => array(
            'key' => '_rama_ads_type'
        ),
        'query_two' => array(
            'key' => '_rama_ads_order',
            'type' => 'NUMERIC',
        ),
    );

    $order_by = array(
        'query_one' => 'ASC',
        'query_two' => 'DESC',
    );

    $query->set( 'meta_query', $meta_query );
    $query->set( 'orderby', $order_by );
4 апр. 2020 г. 05:38:39
Комментарии

Большое спасибо. Я продолжал пытаться использовать meta_type, а оказалось, что нужно просто type

Jacob Raccuia Jacob Raccuia
21 мая 2024 г. 23:42:05
0

Вам нужно выполнить сортировку по определенным условиям для meta_query.

Эта ссылка содержит всю необходимую информацию, которая поможет вам разобраться с синтаксисом и заставить все работать.

https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

21 дек. 2016 г. 18:56:38
2
-3

Попробуйте этот вариант, возможно, он поможет.

<?php
$args = array(
'post_type'  => 'Sports', // Тип записи
'meta_query' => array(
    array(
        'key'     => 'league_count', // Ключ метаполя
                    'orderby' => 'meta_value_num', /* Используйте только если 
                             ключ хранит числовое значение, иначе используйте 'meta_value' */
                    'order' => 'ASC' // Сортировка по возрастанию
    ),
    array(
        'key'     => 'matches_count', // Ключ метаполя
                    'orderby' => 'meta_value_num', // Сортировка по числовому значению
                    'order' => 'ASC' // Сортировка по возрастанию
    ),
),
);
$query = new WP_Query( $args ); // Создание нового запроса
?>
1 июн. 2018 г. 15:09:57
Комментарии

meta_query не поддерживает аргументы orderby в таком виде.

Jacob Peattie Jacob Peattie
1 июн. 2018 г. 17:05:20

Пожалуйста, [отредактируйте] ваш ответ и добавьте объяснение: почему это может решить проблему?

fuxia fuxia
1 июн. 2018 г. 19:00:19