Automattic\WooCommerce\Internal\Abilities\Domain
ProductsQuery::execute
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() 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,
);
}