#wordpress #sorting #advanced-custom-fields #meta-query
#wordpress #сортировка #расширенные пользовательские поля #мета-запрос
Вопрос:
Я запрашиваю списки (пользовательский тип записи) с помощью WP_Query и упорядочиваю результаты по мета-полю ACF. Поле содержит значения цен с символом валюты и разделением запятой, например, 100 000 долларов.
Вот $ args, которые я передаю в WP_Query.
$args = array(
'post_type' => 'listing',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_key' => '_listing_price',
'orderby' => 'meta_value',
'order' => 'ASC'
);
$listing_query = new WP_Query($args);
Это приводит:
$0 $0 $100,000 $150,000 $22,000 $320,300 $33,000 $359,000.
Но мне нужен такой результат:
$0 $0 $22,000 $33,000 $100,000 $150,000 $320,300 $359,000.
Комментарии:
1. Почему бы вам не сохранить только цифры в этом мета-поле и добавить символ валюты позже? Это значительно упростит заказ.
Ответ №1:
В идеале, вы бы просто сохраняли целое (или плавающее) значение, например: 0
, 0
, 22000
, 323000
и т.д. Это позволит вам добавить любые символы валюты и форматирование, которые вы захотите позже, и это упрощает сортировку и манипулирование.
Итак, прежде всего, вы должны оценить, можете ли вы пройти и сделать это (вероятно, это того стоит).
За исключением этого, вы могли бы попробовать использовать meta_value_num
параметр Orderby:
$args = array(
'post_type' => 'listing',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_key' => '_listing_price',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$listing_query = new WP_Query($args);
Однако я не уверен, сработает ли это. Источник показывает, что оно добавляется 0
к псевдониму метазапроса, но никак иначе не приводит его — поэтому я не уверен, как он обрабатывает знаки доллара, запятые и другие символы.
Третьей альтернативой было бы получить ваши результаты такими, какие вы есть сейчас, а затем просмотреть их и изменить порядок вручную на основе значения meta. Для нескольких объявлений это не добавило бы огромных накладных расходов, но я бы избегал такого подхода в любом масштабе.
Комментарии:
1. Хорошо, я понимаю. Но что, если я не могу хранить данные без символа валюты и запятых? Было бы лучше использовать альтернативный подход сортировки списков позже? Если да, то не могли бы вы, пожалуйста, предложить мне алгоритм или подход, как я могу их отсортировать? Спасибо!