У меня есть список продуктов, каждый с ценой в настраиваемом поле, хранящийся в виде текста, такого как «2,50» или «5,00», и я отображаю их на странице с помощью пользовательского запроса, который сортируется по цене:
if(!$wp_query) {
global $wp_query;
}
$args = array(
'meta_key' => 'price',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
query_posts( array_merge( $args , $wp_query->query ) );
Это хорошо работает для цен, но некоторые цены "POA", и я хотел бы показать их в последний раз, однако вышеупомянутые заказы таким образом, что "POA" отображается первым.
Есть ли способ изменить это, или быстрый взлом, который я мог бы использовать, чтобы потом отсортировать массив и поставить последние цены «POA»?
'orderby' => 'meta_value_num',
на'orderby' => 'meta_value_num meta_value',
meta_value meta_value_num
! Благодарность! Вы хотите написать ответ, чтобы я мог проголосовать за него?Ответы:
OrderBy
Аргумент может принимать более одного параметра , поэтому решение было изменения:чтобы:
источник
ORDER BY CASE WHEN wp_postmeta.meta_value RLIKE '^[0-9]' THEN '' ELSE wp_postmeta.meta_value END ASC, wp_postmeta.meta_value+0 ASC
Я нашел это решение, объединив код @bonger и /programming/18084199/wordpress-query-order-by-case-when
И это хорошо работает.
функция
Перед запросом
источник