mrKorg
@mrKorg
web developer

Как добавить кастомную сортировку в Woocommerce?

В дефолтный селект сортировки нужно добавить два поля:
- сортировка по Sales - Отображение товаров, имеющих цену со скидкой
- сортировка New - отображение товаров, имеющих ACF поле (поле checkbox) new со значением true

Нужные пункты в select добавил без проблем, для сортировки использую код:
add_filter('woocommerce_get_catalog_ordering_args', 'wcs_get_catalog_ordering_args');
    function wcs_get_catalog_ordering_args($args)
    {
        $orderby_value = isset($_GET['orderby']) ? woocommerce_clean($_GET['orderby']) : apply_filters('woocommerce_default_catalog_orderby', get_option('woocommerce_default_catalog_orderby'));
        if ('sales' === $orderby_value) {
            $args['orderby'] = 'meta_value_num';
            $args['order'] = 'DESC';
            $args['meta_key'] = '_sale_price';
            $args['meta_query'] = array(
                array(
                    'key' => '_sale_price',
                    'value' => 0,
                    'compare' => '>',
                    'type'    => 'NUMERIC',
                )
            );
        }
        if ('new' === $orderby_value) {
            $args['orderby'] = 'meta_value';
            $args['order'] = 'DESC';
            $args['meta_key'] = 'new';
            $args['meta_query'] = array(
                array(
                    'key' => 'new',
                    'value' => 1,
                    'compare' => '=',
                )
            );
        }
        return $args;
    }


При сортировке New товары сортируются, сразу выводятся поля с New, после остальные. А нужно исключить остальные товары вообще.
Сортировка по sales вообще не работает.
Как правильно добавить свою сортировку?
  • Вопрос задан
  • 810 просмотров
Пригласить эксперта
Ответы на вопрос 1
А нужно исключить остальные товары вообще.

Если товары нужно исключать, то это фильтрация а не сортировка!
Хотя данный код выведет все записи у которых есть мета-поле по которому производится сортировка в указанной последовательности. Это говорит о том, что если какие-то из записей не будут иметь указанного мета-поля (заметьте, что фраза "не будут иметь" означает отсутствие такого мета-поля, а не его пустое значение), то эта запись в выборку не попадет и не будет отображена.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы