WC_Product_Variable::get_available_variationspublicWC 2.4.0

Get an array of available variations for the current product.

Important: The default 'array' return type is expensive for products with many variations. It calls get_available_variation() for each variation, which processes HTML generation (wc_get_stock_html, get_price_html), price calculations (wc_get_price_to_display), image attachment lookups, and dimension/weight formatting - all passed through filters.

Use 'objects' when you only need the WC_Product_Variation objects or a subset of the generated output of ::get_available_variation(), avoiding unnecessary processing overhead.

Method of the class: WC_Product_Variable{}

Returns

Array[]|WC_Product_Variation[]. Array of variation data arrays or variation objects.

Usage

$WC_Product_Variable = new WC_Product_Variable();
$WC_Product_Variable->get_available_variations( $return );
$return(string)
The format to return the results in.
  • 'array': Returns fully processed variation data arrays. Each variation is passed through get_available_variation() which generates HTML, calculates display prices, and formats dimensions/weights. Use this when you need the complete variation data for front-end display.
  • 'objects': Returns WC_Product_Variation objects directly without additional processing. Use this when you need to work with variation objects and will call methods on them selectively.
    Default: 'array'

Changelog

Since 2.4.0 Introduced.

WC_Product_Variable::get_available_variations() code WC 10.7.0

public function get_available_variations( $return = 'array' ) {
	$variation_ids           = $this->get_children();
	$hide_out_of_stock_items = ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) );
	$available_variations    = array();

	if ( ! empty( $variation_ids ) ) {
		// Prime caches to reduce future queries.
		_prime_post_caches( $variation_ids );
	}

	foreach ( $variation_ids as $variation_id ) {

		$variation = wc_get_product( $variation_id );

		// Hide out of stock variations if 'Hide out of stock items from the catalog' is checked.
		if ( ! $variation || ! $variation->exists() || ( $hide_out_of_stock_items && ! $variation->is_in_stock() ) ) {
			continue;
		}

		/**
		 * Filter 'woocommerce_hide_invisible_variations' to optionally hide invisible variations (disabled variations and variations with empty price).
		 *
		 * @since 2.6.8
		 *
		 * @param  bool                  $hide        Whether to hide invisible variations. Default true.
		 * @param  int                   $product_id  The ID of the variation.
		 * @param  WC_Product_Variation  $variation   The variation object.
		 */
		if ( apply_filters( 'woocommerce_hide_invisible_variations', true, $this->get_id(), $variation ) && ! $variation->variation_is_visible() ) {
			continue;
		}

		if ( 'array' === $return ) {
			$available_variations[] = $this->get_available_variation( $variation );
		} else {
			$available_variations[] = $variation;
		}
	}

	if ( 'array' === $return ) {
		$available_variations = array_values( array_filter( $available_variations ) );
	}

	return $available_variations;
}