Как сделать свою сортировку товаров в woocommerce?

Пользователь

от alisa.bahringer , в категории: PHP , год назад

Как сделать свою сортировку товаров в woocommerce?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от miguel_ritchie , год назад

@alisa.bahringer 

Чтобы создать собственную сортировку товаров в WooCommerce, вам потребуется добавить свою функцию сортировки в файл functions.php вашей активной темы или в свой дочерний теме.


Ниже приведен пример кода, который позволит вам сортировать товары по убыванию их цены:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
function custom_woocommerce_catalog_orderby( $sortby ) {
    $sortby['price-desc'] = 'Сортировать по цене (убывание)';
    return $sortby;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );

function custom_woocommerce_get_catalog_ordering_args( $args ) {
    if ( isset( $_GET['orderby'] ) ) {
        switch( $_GET['orderby'] ) {
            case 'price-desc':
                $args['orderby'] = 'meta_value_num';
                $args['order'] = 'DESC';
                $args['meta_key'] = '_price';
                break;
        }
    }
    return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );


Затем вам необходимо добавить следующий код в шаблон страницы каталога товаров (например, file.php или archive-product.php):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<form class="woocommerce-ordering" method="get">
    <select name="orderby" class="orderby">
        <?php
        $orderby_options = apply_filters( 'woocommerce_catalog_orderby', array(
            'menu_order' => __( 'Default', 'woocommerce' ),
            'popularity' => __( 'Popularity', 'woocommerce' ),
            'rating'     => __( 'Average rating', 'woocommerce' ),
            'date'       => __( 'Newness', 'woocommerce' ),
            'price'      => __( 'Price: low to high', 'woocommerce' ),
            'price-desc' => __( 'Price: high to low', 'woocommerce' )
        ) );
        
        foreach ( $orderby_options as $key => $value ) {
            echo '<option value="' . esc_attr( $key ) . '" ' . selected( $_GET['orderby'], $key, false ) . '>' . esc_html( $value ) . '</option>';
        }
        ?>
    </select>
    <button type="submit" class="button">Сортировать</button>
    <?php
    wc_query_string_form_fields( null, array( 'orderby', 'submit' ) );
    ?>
</form>


Теперь вы сможете видеть новую сортировку товаров по цене (убывание) на странице каталога товаров в вашем магазине WooCommerce. Вы можете настроить этот код согласно своим требованиям или добавить собственные функции сортировки.