Параметры meta_query. Сортировка по двум произвольным полям, одно из которых может быть не заполнено. Как сделать?
Есть продукт (custom post type - 'products') и у него есть два произвольных поля "price" и "special_price".
Есть товары у которых заполнены оба поля, а есть такое, у которых только поле "price" (т.е. поле "special_price" НЕ задано, не заполнено).
Задача -> фильтр продуктов по убыванию цены.
Проблема -> как в meta_query учитывать оба поля, с учетом того, что "special_price" не у всех товаров заполнено?
Т.е. нужно в параметрах meta_query создать условие:
Сортировать по умолчанию по полю "special_price", но если "special_price" не заполнено - смотреть значение поля "price" и учитывать его значение в сортировке по убыванию цены.
Пробую так, но не работает:
$args = array( 'post_type' => 'custom_products', , 'relation' => 'OR', 'meta_query' => array( array( 'key' => 'price' ), array( 'key' => 'special_price' ), ), 'orderby' => 'meta_value_num', 'type' => 'NUMERIC', 'order' => 'DESC', );
Помогите пожалуйста разобраться. Спасибо!
Для начала, ты вообще неправильно указываешь параметры запроса...
Далее, не уверен что такой запрос можно создать с помощью WP_Query, но вроде это возможно. Попробуй такой вариант:
Но тут он сначала отсортирует по
sprice
, а у которых нетsprice
отсортирует поprice
. Это не совсем то что тебе нужно, кажется... Однако лучше чем ничего...Спасибо, уважаемый!)
Верно, логика была немного иная, но так тоже годится, иначе, видимо, вообще никак.
Надо сказать сортирует довольно долго.
Для полноты картины полностью параметры выглядят так:
Еще раз, огромное спасибо!
Кэшируй результат если возможно - это аццкий запрос, если данных много...
Я тут прикинул, вот такой запрос по идее может сработать и именно так как тебе нужно... Проверь ка.
Незнаю насколько правильно.... Если создать третье поле в которое автоматом будет писаться минимальное значение и уже по нему делать запрос
Да, пожалуй это выход в данном случае...