Как добавить сортировку товаров WooCommerce по атрибутам (свойствам)

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

По всем вопросам и отзывам просьба писать в комментарии ниже.

Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.

VN:F [1.9.22_1171]
Rating: 4.5/5 (4 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top