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

Ссылка скопирована
1 ответ

Есть самописная тема НЕ на WooCommerce.
Есть каталог через CPT и два мета поля через ACF - price (основная цена) и price_discount (цена со скидкой)
Фильтр реализован с помощью Filter Everething для цены по мета полю price.
Помогите пожалуйста реализовать фильтр по цене, чтобы когда указывается скидка в поле price_discount,
эта скидка учитывалась в фильтре price
Спасибо

Дополнительно

Нужно решить такую задачу?

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

Заказать помощь
Лучший ответ
1
Виктор Sys Ответ

Фильтр по цене со скидкой зависит от того, что вы считаете «ценой со скидкой». В WooCommerce фактическая цена товара хранится в meta _price. Для простых товаров она обычно уже равна sale price, если скидка активна. Поэтому чаще всего фильтровать нужно именно по _price, а не по _regular_price.

Пример запроса товаров в диапазоне:

$query = new WP_Query([
    'post_type' => 'product',
    'meta_query' => [
        [
            'key' => '_price',
            'value' => [1000, 5000],
            'compare' => 'BETWEEN',
            'type' => 'NUMERIC',
        ],
    ],
]);

$query = new WP_Query([ 'post_type' => 'product', 'meta_query' => [ [ 'key' => '_price', 'value' => [1000, 5000], 'compare' => 'BETWEEN', 'type' => 'NUMERIC', ], ], ]);

Если нужно показать только товары, у которых есть скидка:

'meta_query' => [
    [
        'key' => '_sale_price',
        'value' => 0,
        'compare' => '>',
        'type' => 'NUMERIC',
    ],
]

'meta_query' => [ [ 'key' => '_sale_price', 'value' => 0, 'compare' => '>', 'type' => 'NUMERIC', ], ]

Для вариативных товаров всё сложнее: цена хранится у вариаций, а родительский товар получает диапазон минимальной/максимальной цены. Если фильтр должен работать как в каталоге WooCommerce, лучше использовать стандартный layered nav/price filter WooCommerce или совместимый фильтр-плагин.

Если пишете свой фильтр, тестируйте отдельно простые товары, вариативные товары, товары без скидки и товары с истёкшей датой скидки.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно