• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Вытаскиваем максимальную и минимальную цену,площадь и тд. без плагинов

Lart

Новичок
Иногда нужно вытащить какую то величину из базы данных,мин и макс,но в интернете естественно не чего не пишется про это,лишь для woocommerce есть вопросы по этому поводу и не внятные ответы. Но не всегда вообще нужен этот плагин,возможно у вас строительная компания,или каталог какой либо не нуждающийся в корзине и тому подобное,а использовать woocommerce для этих целей не целесообразно,так как он замедляет сильно сайт.Будем считать что у вас другой плагин или самописное решение. Вообще для чего может применяться максимальная и минимальная величины? Самый простой пример это фильтр. Возможно этот метод вам покажется новичковым или глупым.Если у вас есть более практичное решение можете написать как сделать лучше.Как по мне это самый простой и быстрый вариант.
И так первое что нужно сделать это обратиться к яндексу и спросить у него как получить макс и мин цену в вордпресс,мы получим вот такой код :
wpp_get_extremes_price_in_product_cat( $term_id ) {
global $wpdb; $sql = " SELECT MIN( meta_value ) as min_price , MAX( meta_value ) as max_price FROM {$wpdb->posts}
INNER JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id)
INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)
WHERE ( {$wpdb->term_relationships}.term_taxonomy_id IN (%d) ) AND {$wpdb->posts}.post_type = 'product' AND {$wpdb->posts}.post_status = 'publish' AND {$wpdb->postmeta}.meta_key = '_price' "; $result = $wpdb->get_results( $wpdb->prepare( $sql, $term_id ) );
return $result[ 0 ]; }
Вот используя этот код можно вытащить по аналогии также величину своих данных,но вы получите список обьектов не в самом лучшем виде,во первых при создании записи если по умолчанию мета-поле пустое то в базу запишется это мета-поле,но это не самая большая проблема можно в sql запросе проверить на заполненность,самая не приятная проблема заключается в том как sql определяет меньшую и большую величину
Например число 12 > 10000 и тд. короче sql дописывает сам нули и получается 120000 и тд,вобщем нам такой способ не подойдет однозначно,не знаю решена ли эта проблема в самом woocommerce,в принципе если у вас менее круглые числа то sql все правильно сравнивает.Вот я вам щас опишу более костыльное решение этой проблемы.
В файле function.php пропишите
function price_min_max() {

global $wpdb;

$pr = $wpdb->get_results("SELECT meta_value
FROM {$wpdb->posts}
INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)
WHERE {$wpdb->posts}.post_type = 'project'

AND {$wpdb->postmeta}.meta_key = 'price' AND {$wpdb->postmeta}.meta_value != '' ORDER BY {$wpdb->postmeta}.meta_value
");
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($pr));
$max = max(iterator_to_array($iterator, false));
$iterator2 = new RecursiveIteratorIterator(new RecursiveArrayIterator($pr));
$min = min(iterator_to_array($iterator, false));
$args = array($min,$max);

return $args;

}
Cоответственно подставьте свой тип записи и мета-поле. На выходе мы получим список обьектов из 2 элементов min,max,их можем использовать как хотим теперь.
 
Сверху Снизу