/ Сайтостроение / Плагины / Варианты сортировки woocommerce

Варианты сортировки woocommerce

HIT

11.03.2017

8629

8

Добавляем свои варианты сортировки в woocommerce, кроме стандартных: по цене, по новизне, по популярности, по рейтингам.

Вариант сортировки: Случайно

// Добавить вариант сортировки: Случайно

add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );
 
function custom_woocommerce_get_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
	if ( 'random_list' == $orderby_value ) {
		$args['orderby'] = 'rand';
		$args['order'] = '';
		$args['meta_key'] = '';
	}
	return $args;
}
 
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby', 100 );
 
function custom_woocommerce_catalog_orderby( $sortby ) {
	$sortby['random_list'] = __('Случайно');
	return $sortby;
}

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

// Добавить вариант сортировки: По названию

add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_name_args' );

function custom_woocommerce_get_catalog_ordering_name_args( $args ) {
	$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
	if ( 'name_list' == $orderby_value ) {
		$args['orderby'] = 'name';
		$args['order'] = 'ASC';
		$args['meta_key'] = '';
	}
	return $args;
}

add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_name_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_name_orderby', 1 );

function custom_woocommerce_catalog_name_orderby( $sortby ) {
	$sortby['name_list'] = 'По названию';
	return $sortby;
}

Вариант сортировки: По меткам

// Добавить вариант сортировки: По меткам

add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_tag_args' );
function custom_woocommerce_get_catalog_ordering_tag_args( $args ) {
  $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    if ( 'tag_list' == $orderby_value ) {
        $args['orderby'] = 'product_tag';//поле по которому сортируем
        $args['order'] = 'ASC';//по возрастанию (ASC) или убыванию (DESC)
        $args['meta_key'] = '';//по конкретному совпадению ключа
    }
    return $args;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_tag_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_tag_orderby', 5 );

function custom_woocommerce_catalog_tag_orderby( $sortby ) {
    $sortby['tag_list'] = 'По меткам';
    return $sortby;
}

Попытался недавно использовать — обнаружил что работает некорректно.

Вариант сортировки: По наличию

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

add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );

function custom_woocommerce_get_catalog_ordering_args( $args ) {
	$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );

	if ( 'stock_list_asc' == $orderby_value ) {
		$args['orderby'] = 'meta_value_num wp_posts.ID';
		$args['order'] = 'ASC';
		$args['meta_key'] = '_stock';
	}
	elseif ( 'stock_list_desc' == $orderby_value ) {
		$args['orderby'] = 'meta_value_num wp_posts.ID';
		$args['order'] = 'DESC';
		$args['meta_key'] = '_stock';
	}

	return $args;
}

add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );

function custom_woocommerce_catalog_orderby( $sortby ) {
	$sortby['stock_list_desc'] = 'Остаток: по убыванию';
	$sortby['stock_list_asc'] = 'Остаток: по возрастанию';
	return $sortby;
}

Как организовать сортировку по атрибуту товара

В Woocommerce заложена возможность произвольной сортировки товаров.

Удаляем варианты сортировки

Чтобы отключить стандартный вариант сортировки, нужно использовать следующую функцию:

function my_woocommerce_catalog_orderby( $orderby ) {
    unset($orderby["price"]);
    unset($orderby["price-desc"]);
    return $orderby;
}
add_filter( "woocommerce_catalog_orderby", "my_woocommerce_catalog_orderby", 20 );

Варианты сортировки woocommerce:

  • По-умолчанию (по сути по дате, либо если настроено по menu_order)
  • По популярности (popularity)
  • По рейтингу (rating)
  • По дате (date, игнорирует menu_order)
  • По возрастанию цены (price)
  • По убыванию цены (price-desc)

Тэги: ,

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Юр. или физ. лицо при оформлении

Юр. или физ. лицо при оформлении

Расширим функционал Woocommerce выбором при оформлении заказа: юр. или физ. лицо. Естественно данный выбор будет влиять на множество аспектов самого процесса заказа и прочих функций WC. Создание переключателя и полей Читать далее »

/
Сортировка постов (по дате, по заголовку, по дате изменений)

Сортировка постов (по дате, по заголовку, по дате изменений)

Создадим для удобства пользователей функционал сортировки постов (по дате, по заголовку, по дате изменений). Сортировка отличается от фильтрации тем, что при сортировке показываются все записи, но в другом порядке, а Читать далее »

Статусы заказов

Статусы заказов

Как и любой интернет-магазин Woocommerce присваивает заказам определенные статусы в зависимости от отплаты и формирования заказа. Существует 7 различных статусов заказа: В ожидании оплаты (Pending payment) Обработка (Processing) На удержании Читать далее »

Добавить комментарий

8 комментариев

  1. Аватар
    Никита

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

    1. Alexandr
      Alexandr

      Спасибо! Учту этот момент.

  2. Аватар
    Андрей

    Куда добавляем? Где добавляем??? Какой файл?

  3. Аватар
    Денис

    Как сделать чтобы от меньшего в большему шли по цене? Настройки вуки не работают

    1. Alexandr
      Alexandr

      Таким вопросом не задавался. т.к. сортировка по цене есть в базовой комплектации. А если она не работает, то нужно устранить причины этого (возможно какой-то плагин или кастомная функция).

  4. Аватар
    Dan Zakirov

    А как добавить сортировку по конкретному произвольному полю

    1. Alexandr
      Alexandr

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

Варианты сортировки woocommerce
Галерея изображений товара в категории
Рекомендации для васГалерея изображений товара в категорииOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.