4ответ(ов) в теме
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
1
23:03

Нужен был простой элементарный фильтр для отсева постов исключительно по цене, сделал функцию в теме:

function go_filter() { // наша функция
    $args = array(); // подготовим массив 
    $args['meta_query'] = array('relation' => 'AND'); // отношение между условиями, у нас это "И то И это", можно ИЛИ(OR)
    global $wp_query; // нужно заглобалить текущую выборку постов

    

    if ($_GET['price_ot'] != '' || $_GET['price_do'] != '') { // если передано поле "Цена от" или "Цена до"
        if ($_GET['price_ot'] == '') $_GET['price_ot'] = 0; // если "Цена от" пустое, то значит от 0 и выше
        if ($_GET['price_do'] == '') $_GET['price_do'] = 9999999; // если "Цена до" пустое, то будет до 9999999
        $args['meta_query'][] = array( // пешем условия в meta_query
            'key' => 'price-products', // название произвольного поля
            'value' => array( (int)$_GET['price_ot'], (int)$_GET['price_do'] ), // переданные значения ОТ и ДО для интервала передаются в массиве
            'type' => 'numeric', // тип поля - число
            'compare' => 'BETWEEN' // тип сравнения, здесь это BETWEEN - т.е. между "Цены от" и до "Цены до"
            );
    }

            
    query_posts(array_merge($args,$wp_query->query)); // сшиваем текущие условия выборки стандартного цикла wp с новым массивом переданным из формы и фильтруем
}

добавил перед циклом на странице поиска:

<?php if ($_GET && !empty($_GET)) { // если было передано что-то из формы
	go_filter(); // запускаем функцию фильтрации
} ?>

Код формы:

<form class="filter" action="" method="get"><!-- action пустой, чтобы ссылалось на текущую страницу -->
<label>Цена от: <!-- Интервал значений цены -->
		<input type="number" name="price_ot"/>
	</label>
	<label>до: 
		<input type="number" name="price_do"/>
	</label>
<button type="submit">Отфильтровать</button>
</form>

и не работает, ни на одном шаблоне с циклом, в чем проблема?( остался последний штрих.

0
Андрей CS
не в сети 1 час
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
2
23:15

функцию go_filter(); запускаете перед циклом?
В массиве array_merge($args,$wp_query->query) результат через print_r смотрели? что там получается?

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
3
00:14

Андрей Plechev сказал(а)

функцию go_filter(); запускаете перед циклом?
В массиве array_merge($args,$wp_query->query) результат через print_r смотрели? что там получается?

или пустое значение или теряет параметр...

0
Шустрый Огурчик
не в сети 8 лет
На сайте с 27.02.2014
Участник
Тем 38
Сообщения 111
4
23:48

Значит прочитал мануал именно на wppost, все заработало отлично, и самое главное что все понял как по полочкам теперь)
Запутал немного первый мануал, но в итоге все работает более чем отлично)) осталось чуть поднастроить, купить пару платников и наслаждаться жизнью.

0
Тема закрыта. Публикация новых сообщений запрещена.