WC_Product_Variable::get_available_variations
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{}
Hooks from the method
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() 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;
}