woocommerce_get_catalog_ordering_args
Позволяет изменить параметры сортировки товаров (отсортировать товары по кастомным полям).
Использование
add_filter( 'woocommerce_get_catalog_ordering_args', 'wp_kama_woocommerce_get_catalog_ordering_args_filter', 10, 3 ); /** * Function for `woocommerce_get_catalog_ordering_args` filter-hook. * * @param $args * @param $orderby * @param $order * * @return */ function wp_kama_woocommerce_get_catalog_ordering_args_filter( $args, $orderby, $order ){ // filter... return $args; }
- $args(массив) (обязательный)
Массив параметров. Возможные элементы:
-
orderby
(строка)
Поле, по которому нужно отсортировать товары.
По умолчанию: date -
order
(строка)
Порядок сортировки товаров.
По умолчанию: DESC meta_key
(строка)
Ключ, по значениям которого нужно отсортировать.
По умолчанию: пустая строка
-
- $orderby(строка)
- Поле по которому нужно отсортировать товары.
- $order(строка)
- Порядок сортировки товаров.
Примеры
#1 Добавим новое поле для сортировки товаров по скидке
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'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ); if ( 'sale' == $orderby_value ) { $args = [ 'orderby' => 'meta_value_num', 'meta_key' => '_sale_price', 'order' => 'DESC', ]; } return $args; } // Добавим возможность выбора сортировки в настройках каталога woocommerce 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['sale'] = __( 'By sale', 'woocommerce' ); return $sortby; }
Где вызывается хук
woocommerce_get_catalog_ordering_args
woocommerce/includes/class-wc-query.php 649
return apply_filters( 'woocommerce_get_catalog_ordering_args', $args, $orderby, $order );