Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection

QueryBuilder::get_custom_orderby_query()privateWC 1.0

Return query params to support custom sort values

Method of the class: QueryBuilder{}

No Hooks.

Return

Array.

Usage

// private - for code of main (parent) class only
$result = $this->get_custom_orderby_query( $orderby );
$orderby(string) (required)
Sort order option.

QueryBuilder::get_custom_orderby_query() code WC 9.6.1

private function get_custom_orderby_query( $orderby ) {
	if ( ! in_array( $orderby, $this->custom_order_opts, true ) || 'post__in' === $orderby ) {
		return array( 'orderby' => $orderby );
	}

	if ( 'price' === $orderby ) {
		add_filter( 'posts_clauses', array( $this, 'add_price_sorting_posts_clauses' ), 10, 2 );
		return array(
			'isProductCollection' => true,
			'orderby'             => $orderby,
		);
	}

	// The popularity orderby value here is for backwards compatibility as we have since removed the filter option.
	if ( 'sales' === $orderby || 'popularity' === $orderby ) {
		add_filter( 'posts_clauses', array( $this, 'add_sales_sorting_posts_clauses' ), 10, 2 );
		return array(
			'isProductCollection' => true,
			'orderby'             => $orderby,
		);
	}

	if ( 'menu_order' === $orderby ) {
		return array(
			'orderby' => 'menu_order',
			'order'   => 'ASC',
		);
	}

	if ( 'random' === $orderby ) {
		return array(
			'orderby' => 'rand',
		);
	}

	$meta_keys = array(
		'rating' => '_wc_average_rating',
	);

	return array(
		// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
		'meta_key' => $meta_keys[ $orderby ],
		'orderby'  => 'meta_value_num',
	);
}