woocommerce_get_catalog_ordering_args
Allows you to change product sorting parameters (sort products by custom fields).
Usage
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(array) (required)
An array of parameters. Possible elements:
-
orderby(string)
The field by which products should be sorted.
Default: date -
order(string)
The product sorting order.
Default: DESC - meta_key(string)
The key whose values should be used for sorting.
Default: empty string
-
- $orderby(string)
- The field by which products should be sorted.
- $order(string)
- The product sorting order.
Examples
#1 Add a new field for sorting products by discount
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;
}
// Add the sorting option to the WooCommerce catalog settings
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
// Output the sorting option on shop pages
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
function custom_woocommerce_catalog_orderby( $sortby ) {
$sortby['sale'] = __( 'By sale', 'woocommerce' );
return $sortby;
}Where the hook is called
woocommerce_get_catalog_ordering_args
woocommerce/includes/class-wc-query.php 763
return apply_filters( 'woocommerce_get_catalog_ordering_args', $args, $orderby, $order );