В плагине WooCommerce есть несколько вариантов сортировки товаров на странице магазина. По-умолчанию, Вы найдёте 6 настроек во вкладке WooCommerce > Настройки > Товары > Отображение:
- Сортировка по-умолчанию (пользовательский порядок + название)
- Популярность (количество продаж)
- Средняя оценка
- Самые новые
- Цена (по-возрастанию)
- Цена (по-убыванию)
Для того, чтобы добавить дополнительные способы сортировки в свой магазин, используя мета данные, вы можете использовать следующий материал.
Однако, указанная статья не поможет, если вы захотите добавить вариант сортировки по атрибутам товаров. Атрибуты (свойства) товаров хранятся в сериализованном формате, и, как следствие, являются недоступными для сортировки с помощью orderby.
Для того, чтобы использовать атрибуты для сортировки, они должны быть сохранены как мета данные.
Когда запись, у которое есть несколько пользовательских атрибутов обновляется, отправляемые данные ($_REQUEST) содержат следующее:
'attribute_names' => array ( 0 => 'pa_pub-year', 1 => 'pa_pub-author', ... ), 'attribute_position' => array ( 0 => '1', 1 => '1', ...... 'attribute_is_taxonomy' => array ( 0 => '1', ...... ), 'attribute_values' => array ( 0 => '1990', 1 => '', 2 => '', ...... ),
Мы увидели, как можно получить отправляемые атрибуты и сохранить их в виде мета данных. Далее, модифицируем код, предоставленный WooCommerce выше, и получаем способ сортировки атрибутов.
Пример кода
Помещаем следующий код в файл functions.php вашей темы или в плагин для сайта WordPress
/************* Добавляем сортировку по атрибутам **************/
/**
* Определяем критерии для сортировки с опциями, определенными в методе ниже
*/
add_filter('woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args');
function custom_woocommerce_get_catalog_ordering_args( $args ) {
global $wp_query;
// Меняем $_SESSION на $_GET
if (isset($_GET['orderby'])) {
switch ($_GET['orderby']) :
case 'pa_pub-year' :
$args['order'] = 'ASC';
$args['meta_key'] = 'pa_pub-year';
$args['orderby'] = 'meta_value_num';
break;
endswitch;
}
return $args;
}
/**
* Добавляем способ сортировки в выпадающий список
*/
add_filter('woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby');
function custom_woocommerce_catalog_orderby( $sortby ) {
$sortby['pa_pub-year'] = 'Сортировка по году: От старых к новым';
return $sortby;
}
/**
* Сохраняем атрибуты товара в виде мета данных к записи для того, чтобы использовать их в сортировке и поиске
*/
add_action( 'save_post', 'save_woocommerce_attr_to_meta' );
function save_woocommerce_attr_to_meta( $post_id ) {
// Получаем названия атрибутов .. Для каждого элемента получаем индекс и название атрибута
// Затем используем индекс для получения соответствующего отправленного значения из массива attribute_values.
foreach( $_REQUEST['attribute_names'] as $index => $value ) {
update_post_meta( $post_id, $value, $_REQUEST['attribute_values'][$index] );
}
}
/************ Конец сортировки ***************************/
Мы надеемся, что эта статья помогла вам добавить сортировку товара по атрибутам (свойствам) в ваш магазин WooCommerce.
Если вы начинаете разбираться с WooCommerce, то не забудьте посетить нашу рубрику WooCommerce, где мы публикуем материалы специально по тематике магазинов на этой платформе.
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.
