WooCommerce позволяет гибко управлять порядком отображения товаров в каталоге интернет-магазина. По умолчанию пользователям доступны варианты сортировки по популярности, рейтингу, новизне и цене, однако практически любой алгоритм можно изменить или полностью заменить собственным.

В данной статье подробно рассмотрим все способы сортировки товаров WooCommerce, начиная со встроенных возможностей и заканчивая созданием собственных вариантов сортировки при помощи PHP.

Какие варианты сортировки есть в WooCommerce

После установки WooCommerce пользователям доступны следующие способы сортировки:

  • По умолчанию (меню магазина);
  • По популярности;
  • По среднему рейтингу;
  • По новизне;
  • По возрастанию цены;
  • По убыванию цены.

За работу сортировки отвечает выпадающий список:

woocommerce_catalog_ordering()

Как изменить сортировку по умолчанию

В административной панели откройте:

WooCommerce → Настройки → Товары

Выберите необходимый вариант:

  • По меню;
  • По популярности;
  • По рейтингу;
  • По дате;
  • По цене.

Если требуется программное изменение, используйте фильтр.

add_filter('woocommerce_default_catalog_orderby', function () {
    return 'date';
});

Теперь товары будут выводиться по дате добавления.

Сортировка по ID

Иногда требуется показывать товары по идентификатору.

add_action('woocommerce_product_query', function ($q){

    $q->set('orderby','ID');
    $q->set('order','DESC');

});

Последние добавленные товары окажутся сверху.

Сортировка по дате создания

add_action('woocommerce_product_query', function ($q){

    $q->set('orderby','date');
    $q->set('order','DESC');

});

Новые товары будут отображаться первыми.

Сортировка по цене

Цена хранится в метаполе _price.

По возрастанию:

add_action('woocommerce_product_query', function ($q){

    $q->set('meta_key','_price');
    $q->set('orderby','meta_value_num');
    $q->set('order','ASC');

});

По убыванию:

add_action('woocommerce_product_query', function ($q){

    $q->set('meta_key','_price');
    $q->set('orderby','meta_value_num');
    $q->set('order','DESC');

});

Сортировка по алфавиту

add_action('woocommerce_product_query', function ($q){

    $q->set('orderby','title');
    $q->set('order','ASC');

});

Товары будут отсортированы по названию.

Сортировка по популярности

WooCommerce хранит количество продаж в поле:

total_sales

Пример:

add_action('woocommerce_product_query', function ($q){

    $q->set('meta_key','total_sales');
    $q->set('orderby','meta_value_num');
    $q->set('order','DESC');

});

Сортировка по рейтингу

Средний рейтинг находится в поле:

_average_rating
add_action('woocommerce_product_query', function ($q){

    $q->set('meta_key','_average_rating');
    $q->set('orderby','meta_value_num');
    $q->set('order','DESC');

});

Сортировка по наличию товара

Сначала выводятся товары в наличии.

add_action('woocommerce_product_query', function($q){

    $q->set('meta_key','_stock_status');

    $q->set('orderby',array(
        'meta_value'=>'ASC',
        'date'=>'DESC'
    ));

});

Товары со статусом instock будут выше остальных.

Сортировка по остатку на складе

add_action('woocommerce_product_query', function ($q){

    $q->set('meta_key','_stock');
    $q->set('orderby','meta_value_num');
    $q->set('order','DESC');

});

Сортировка по SKU

add_action('woocommerce_product_query', function ($q){

    $q->set('meta_key','_sku');
    $q->set('orderby','meta_value');
    $q->set('order','ASC');

});

Сортировка по пользовательскому полю

Допустим существует поле:

priority

Тогда:

add_action('woocommerce_product_query', function ($q){

    $q->set('meta_key','priority');
    $q->set('orderby','meta_value_num');
    $q->set('order','DESC');

});

Сортировка по ACF полю

Например имеется поле:

sort_order
add_action('woocommerce_product_query', function ($q){

    $q->set('meta_key','sort_order');
    $q->set('orderby','meta_value_num');
    $q->set('order','ASC');

});

Сортировка сразу по нескольким параметрам

Например:

  • сначала наличие;
  • потом цена;
  • потом дата.
add_action('woocommerce_product_query', function ($q){

    $q->set('meta_key','_stock_status');

    $q->set('orderby',array(
        'meta_value'=>'ASC',
        'price'=>'ASC',
        'date'=>'DESC'
    ));

});

Добавление собственного варианта сортировки

Добавим новый пункт:

По артикулу
add_filter('woocommerce_catalog_orderby',function($sortby){

    $sortby['sku']='По артикулу';

    return $sortby;

});

Теперь необходимо обработать выбранный вариант.

add_filter('woocommerce_get_catalog_ordering_args',function($args){

    if(isset($_GET['orderby']) && $_GET['orderby']=='sku'){

        $args['orderby']='meta_value';
        $args['order']='ASC';
        $args['meta_key']='_sku';

    }

    return $args;

});

Удаление ненужных вариантов сортировки

add_filter('woocommerce_catalog_orderby',function($sortby){

    unset($sortby['rating']);
    unset($sortby['popularity']);

    return $sortby;

});

В результате останутся только необходимые пользователю способы сортировки.

Метки: ,