4ответ(ов) в теме
Шустрый Огурчик
не в сети 10 лет
На сайте с 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

Fatal error: Uncaught Error: Call to undefined function ads_get_box() in /var/www/www-root/data/www/codeseller.ru/wp-content/themes/codeseller/includes/adv.php:15 Stack trace: #0 /var/www/www-root/data/www/codeseller.ru/wp-includes/class-wp-hook.php(310): add_adv_content_after_first_forum_post('pfm-single-post...', '/var/www/www-ro...') #1 /var/www/www-root/data/www/codeseller.ru/wp-includes/class-wp-hook.php(334): WP_Hook->apply_filters('', Array) #2 /var/www/www-root/data/www/codeseller.ru/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #3 /var/www/www-root/data/www/codeseller.ru/wp-content/plugins/wp-recall/functions/files.php(57): do_action('rcl_include_tem...', 'pfm-single-post...', '/var/www/www-ro...') #4 /var/www/www-root/data/www/codeseller.ru/wp-content/plugins/wp-recall/add-on/prime-forum/functions-templates.php(117): rcl_include_template('pfm-single-post...', '/var/www/www-ro...') #5 /var/www/www-root/data/www/codeseller.ru/wp-content/plugins/wp-recall/add-on/prime-forum/themes/prime-first/templates/pfm in /var/www/www-root/data/www/codeseller.ru/wp-content/themes/codeseller/includes/adv.php on line 15