Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection

QueryBuilder::get_stock_status_query()privateWC 1.0

Return a query for products depending on their stock status.

Method of the class: QueryBuilder{}

No Hooks.

Return

Array.

Usage

// private - for code of main (parent) class only
$result = $this->get_stock_status_query( $stock_statuses );
$stock_statuses(array) (required)
An array of acceptable stock statuses.

QueryBuilder::get_stock_status_query() code WC 9.6.1

private function get_stock_status_query( $stock_statuses ) {
	if ( ! is_array( $stock_statuses ) ) {
		return array();
	}

	$stock_status_options = array_keys( wc_get_product_stock_status_options() );

	/**
	 * If all available stock status are selected, we don't need to add the
	 * meta query for stock status.
	 */
	if (
		count( $stock_statuses ) === count( $stock_status_options ) &&
		array_diff( $stock_statuses, $stock_status_options ) === array_diff( $stock_status_options, $stock_statuses )
	) {
		return array();
	}

	/**
	 * If all stock statuses are selected except 'outofstock', we use the
	 * product visibility query to filter out out of stock products.
	 *
	 * @see get_product_visibility_query()
	 */
	$diff = array_diff( $stock_status_options, $stock_statuses );
	if ( count( $diff ) === 1 && in_array( 'outofstock', $diff, true ) ) {
		return array();
	}

	return array(
		// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
		'meta_query' => array(
			array(
				'key'     => '_stock_status',
				'value'   => (array) $stock_statuses,
				'compare' => 'IN',
			),
		),
	);
}