В плагине 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, где мы публикуем материалы специально по тематике магазинов на этой платформе.
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.