Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection

QueryBuilder::get_final_frontend_query()publicWC 1.0

Get the final query arguments for the frontend.

Метод класса: QueryBuilder{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

$QueryBuilder = new QueryBuilder();
$QueryBuilder->get_final_frontend_query( $collection_args, $query, $page, $is_exclude_applied_filters );
$collection_args(массив) (обязательный)
Any special arguments that should change the behavior of the query.
$query(массив) (обязательный)
The query arguments.
$page(int)
The page number.
По умолчанию: 1
$is_exclude_applied_filters(true|false)
Whether to exclude the applied filters or not.
По умолчанию: false

Код QueryBuilder::get_final_frontend_query() WC 9.8.5

public function get_final_frontend_query( $collection_args, $query, $page = 1, $is_exclude_applied_filters = false ) {
	$product_ids = $query['post__in'] ?? array();
	$offset      = $query['offset'] ?? 0;
	$per_page    = $query['perPage'] ?? 9;
	$order       = $query['order'] ?? 'asc';
	$search      = $query['search'] ?? '';

	$common_query_values = array(
		// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
		'meta_query'     => array(),
		'posts_per_page' => $per_page,
		'order'          => $order,
		'offset'         => ( $per_page * ( $page - 1 ) ) + $offset,
		'post__in'       => $product_ids,
		'post_status'    => 'publish',
		'post_type'      => 'product',
		// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
		'tax_query'      => array(),
		'paged'          => $page,
		's'              => $search,
	);

	$is_on_sale          = $query['woocommerceOnSale'] ?? false;
	$order_by            = $query['orderBy'] ?? '';
	$stock_status        = $query['woocommerceStockStatus'] ?? array_keys( wc_get_product_stock_status_options() );
	$product_attributes  = $query['woocommerceAttributes'] ?? array();
	$taxonomies_query    = $this->get_filter_by_taxonomies_query( $query['tax_query'] ?? array() );
	$handpicked_products = $query['woocommerceHandPickedProducts'] ?? array();
	$time_frame          = $query['timeFrame'] ?? null;
	$price_range         = $query['priceRange'] ?? null;
	$featured            = $query['featured'] ?? false;

	// Allow collections to modify the collection arguments passed to the query builder.
	$handlers = $this->collection_handler_store[ $collection_args['name'] ] ?? null;
	if ( isset( $handlers['frontend_args'] ) ) {
		$collection_args = call_user_func( $handlers['frontend_args'], $collection_args, $query );
	}

	$final_query = $this->get_final_query_args(
		$collection_args,
		$common_query_values,
		array(
			'on_sale'             => $is_on_sale,
			'stock_status'        => $stock_status,
			'orderby'             => $order_by,
			'product_attributes'  => $product_attributes,
			'taxonomies_query'    => $taxonomies_query,
			'handpicked_products' => $handpicked_products,
			'featured'            => $featured,
			'timeFrame'           => $time_frame,
			'priceRange'          => $price_range,
		),
		$is_exclude_applied_filters
	);

	return $final_query;
}