woocommerce_get_catalog_ordering_argsfilter-hookWC 1.0

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

WC_Query::get_catalog_ordering_args()
woocommerce_get_catalog_ordering_args
woocommerce/includes/class-wc-query.php 763
return apply_filters( 'woocommerce_get_catalog_ordering_args', $args, $orderby, $order );

Where the hook is used in WooCommerce

Usage not found.