Как сделать фильтр по цене со скидкой?

Для создания фильтра по цене со скидкой в WordPress можно использовать несколько подходов. В данном ответе я расскажу о двух наиболее популярных способах: использование плагина и написание собственного кода.

1. Использование плагина:

Одним из самых популярных плагинов для создания фильтров в WordPress является "WooCommerce Price Filter". Этот плагин специально разработан для фильтрации товаров по цене в магазине, созданном на платформе WooCommerce.

Для установки и настройки плагина "WooCommerce Price Filter" следуйте следующим шагам:

1. Зайдите в административную панель своего сайта WordPress и перейдите в раздел "Плагины".
2. Нажмите на кнопку "Добавить новый" и введите в поисковой строке название плагина – "WooCommerce Price Filter". Найдите плагин в списке и нажмите на кнопку "Установить сейчас".
3. После установки плагина активируйте его, нажав на кнопку "Активировать".

После активации плагина "WooCommerce Price Filter" он автоматически добавит фильтр по цене со скидкой на страницу товаров вашего магазина. Пользователи смогут выбрать ценовой диапазон и увидеть только товары, у которых цена соответствует выбранному диапазону.

2. Написание собственного кода:

Если вам необходимо создать фильтр по цене со скидкой вне платформы WooCommerce или вы хотите создать более гибкий и настраиваемый фильтр, можно написать собственный код.

В данном примере предполагается, что вы уже используете WordPress и имеете базовые знания в разработке на платформе.

function custom_discounted_price_filter() {
    // Получаем минимальную и максимальную цены для товаров со скидкой
    $min_discounted_price = get_min_discounted_price();
    $max_discounted_price = get_max_discounted_price();
    ?>
    <form method="GET" action="<?php echo esc_url( home_url( '/' ) ); ?>">
        <input type="hidden" name="post_type" value="product">
        <input type="hidden" name="orderby" value="meta_value_num">
        <input type="hidden" name="meta_key" value="discounted_price">
        
        <label for="min_price">Min Price:</label>
        <input type="number" name="min_price" id="min_price" value="<?php echo $min_discounted_price; ?>">
        
        <label for="max_price">Max Price:</label>
        <input type="number" name="max_price" id="max_price" value="<?php echo $max_discounted_price; ?>">
        
        <input type="submit" value="Apply">
    </form>
    <?php
}

function get_min_discounted_price() {
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => 1,
        'meta_key' => 'discounted_price',
        'orderby' => 'meta_value_num',
        'order' => 'ASC',
    );
    $query = new WP_Query( $args );
    $min_price = $query->posts[0]->discounted_price;
    wp_reset_query();
    return $min_price;
}

function get_max_discounted_price() {
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => 1,
        'meta_key' => 'discounted_price',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
    );
    $query = new WP_Query( $args );
    $max_price = $query->posts[0]->discounted_price;
    wp_reset_query();
    return $max_price;
}

В вышеуказанном коде используются две функции: custom_discounted_price_filter и get_min_discounted_price. Функция custom_discounted_price_filter выводит HTML-форму с двумя полями: минимальная цена и максимальная цена. Функция get_min_discounted_price получает минимальную цену для товаров со скидкой, а функция get_max_discounted_price получает максимальную цену. Вы можете настроить запросы и данные, которые выводятся в форме в соответствии с вашими потребностями.

Чтобы вывести фильтр на страницу со списком товаров, добавьте следующий код в нужный шаблон или файл функций вашей темы:

add_action( 'woocommerce_before_shop_loop', 'custom_discounted_price_filter', 30 );

Обратите внимание, что вышеуказанный код предполагает, что вы уже имеете настроенные данные с информацией о цене и скидке для ваших товаров.

При использовании собственного кода для создания фильтра по цене со скидкой вам нужно будет настроить запросы и данные в соответствии с вашими потребностями.