Добавить опцию сортировки товаров по звездочному рейтингу AS C в Woocommerce - PullRequest
1 голос
/ 12 июля 2020

Я ищу способ отсортировать товары по рейтингу (как c и des c). Похоже, мне нужно было бы создать собственный код для этого, поскольку что-то подобное, например, не реализовано в Woocommerce.

$options['rating-asc'] - это фрагмент кода, который не работает / не существует, но я используйте его для express функции, которую я ищу, например, $options['title-desc'].

add_filter( 'woocommerce_catalog_orderby', 'rory_add_custom_sorting_options' );

function rory_add_custom_sorting_options( $options ){
    $options['rating-asc'] = 'Rating (Asc)';
    return $options;
 
}

Ответы [ 2 ]

2 голосов
/ 12 июля 2020

Сначала вам нужно определить 'rating-asc' аргументы параметров сортировки в настраиваемой функции, подключенной к woocommerce_get_catalog_ordering_args hook.

Как вариант сортировки «Сортировать по среднему рейтингу» существует, если вы посмотрите на существующие аргументы по умолчанию для сортировки продуктов по ключу "рейтинг", у вас есть этот массив:

$args = array(
    'orderby' => array(
        'meta_value_num' => 'DESC',
         'ID' => 'ASC'
    ),
    'order' => 'ASC',
    'meta_key' => '_wc_average_rating'
);

Итак, вам просто нужно изменить 'meta_value_num' => 'DESC' на 'meta_value_num' => 'ASC', тогда ваш правильный рабочий код будет быть как:

add_filter( 'woocommerce_get_catalog_ordering_args', 'enable_catalog_ordering_by_ratings' );
function enable_catalog_ordering_by_ratings( $args ) {
    if ( isset( $_GET['orderby'] ) && 'rating-asc' === $_GET['orderby']
    && isset($args['orderby']['meta_value_num']) ) {
       $args['orderby']['meta_value_num'] = 'ASC';
    }
    return $args;
}

Теперь вы можете вставить новую опцию сортировки сразу после «Сортировать по средней оценке» существующей, например:

add_filter( 'woocommerce_catalog_orderby', 'catalog_orderby_ratings_asc_filter' );
function catalog_orderby_ratings_asc_filter( $options ){
    $sorted_options =[];

    foreach( $options as $key => $label ){
        if( 'rating' === $key ) {
            $sorted_options['rating'] = $options['rating'] . ' ' . __('(Desc)', 'woocommerce');
            $sorted_options['rating-asc'] = $options['rating'] . ' ' . __('(Asc)', 'woocommerce');
        } else {
            $sorted_options[$key] = $label;
        }
    }

    return $sorted_options;
}

Код входит в function. php файл вашей активной дочерней темы (или активной темы). Протестировано и работает.

Добавить новую опцию каталога заказа по умолчанию в Woocommerce

Установить произвольную сортировку товаров по умолчанию в Woocommerce опцию сортировки
1 голос
/ 12 июля 2020

Ваш код должен работать только для добавления параметра сортировки в раскрывающийся список, но если вы хотите, чтобы он работал, вам нужно связать его с мета-ключом или чем-то еще, добавив правильные аргументы в запрос продуктов каталога, например:

add_filter( 'woocommerce_get_catalog_ordering_args', 'rory_custom_sorting_args' );
 
function rory_custom_sorting_args( $args ) {
 
    if( isset( $_GET['orderby'] ) && 'rating-asc' === $_GET['orderby'] ) {
        $args['meta_key'] = 'rating-asc'; // Replace this with the meta key you want to use for ordering products
        $args['orderby'] = array( 'meta_value' => 'ASC' );
    }
 
    return $args;
 }
...