Automattic\WooCommerce\Internal\Abilities\Domain

ProductsQuery::executepublic staticWC 10.9.0

Query products.

Method of the class: ProductsQuery{}

No Hooks.

Returns

Array|\WP_Error.

Usage

$result = ProductsQuery::execute( $input );
$input(array) (required)
Ability input.

Changelog

Since 10.9.0 Introduced.

ProductsQuery::execute() code WC 11.0.1

public static function execute( array $input ) {
	if ( ! empty( $input['id'] ) ) {
		$product = self::get_product_from_input( $input );

		if ( is_wp_error( $product ) ) {
			return $product;
		}

		if ( $product->is_type( ProductType::VARIATION ) ) {
			return new \WP_Error(
				'woocommerce_product_type_unsupported',
				__( 'Product type is not supported by this ability.', 'woocommerce' ),
				array( 'status' => 400 )
			);
		}

		return array(
			'products'    => array( self::format_product_for_response( $product ) ),
			'total_pages' => 1,
			'page'        => 1,
			'per_page'    => 1,
		);
	}

	$page     = (int) ( $input['page'] ?? 1 );
	$per_page = (int) ( $input['per_page'] ?? 10 );
	$args     = array(
		'limit'    => $per_page,
		'page'     => $page,
		'paginate' => true,
		'return'   => 'objects',
	);

	foreach ( array( 'status', 'sku', 'stock_status' ) as $field ) {
		if ( ! empty( $input[ $field ] ) ) {
			$args[ $field ] = wc_clean( $input[ $field ] );
		}
	}

	if ( ! empty( $input['product_type_alias'] ) && is_scalar( $input['product_type_alias'] ) ) {
		$product_type_alias = sanitize_text_field( (string) $input['product_type_alias'] );
		$type_args          = self::get_product_query_args_for_alias( $product_type_alias );

		if ( is_wp_error( $type_args ) ) {
			return $type_args;
		}

		$args = array_merge( $args, $type_args );
	}

	if ( ! empty( $input['search'] ) ) {
		$args['s'] = wc_clean( $input['search'] );
	}

	$results  = wc_get_products( $args );
	$products = is_object( $results ) && isset( $results->products ) ? $results->products : array();
	$pages    = is_object( $results ) && isset( $results->max_num_pages ) ? (int) $results->max_num_pages : ( count( $products ) > 0 ? 1 : 0 );

	return array(
		'products'    => array_map(
			static function ( $product ) {
				return self::format_product_for_response( $product );
			},
			$products
		),
		'total_pages' => $pages,
		'page'        => $page,
		'per_page'    => $per_page,
	);
}