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;
});
В результате останутся только необходимые пользователю способы сортировки.
Метки: WooCommerce, WordPress



