WC_Product_Variable::get_available_variation
Returns an array of data for a variation. Used in the add to cart form.
Method of the class: WC_Product_Variable{}
Hooks from the method
Returns
Array|true|false.
Usage
$WC_Product_Variable = new WC_Product_Variable(); $WC_Product_Variable->get_available_variation( $variation );
- $variation(WC_Product) (required)
- Variation product object or ID.
Changelog
| Since 2.4.0 | Introduced. |
WC_Product_Variable::get_available_variation() WC Product Variable::get available variation code WC 10.9.1
public function get_available_variation( $variation ) {
if ( is_numeric( $variation ) ) {
$variation = wc_get_product( $variation );
}
if ( ! $variation instanceof WC_Product_Variation ) {
return false;
}
$variation_featured_id = (int) $variation->get_image_id();
$variation_featured_valid = $variation_featured_id && wp_attachment_is_image( $variation_featured_id );
$parent_featured_id = (int) $this->get_image_id();
$parent_featured_valid = $parent_featured_id && wp_attachment_is_image( $parent_featured_id );
$variation_gallery_image_ids = array();
$variation_gallery_html = '';
if ( VariationGalleryPackage::is_enabled() ) {
$variation_gallery_image_ids = array_values(
array_filter(
array_map( 'intval', $variation->get_gallery_image_ids() ),
'wp_attachment_is_image'
)
);
}
// Prefer variation-owned images over the parent fallback.
if ( $variation_featured_valid ) {
$selected_image_id = $variation_featured_id;
} elseif ( ! empty( $variation_gallery_image_ids ) ) {
$selected_image_id = $variation_gallery_image_ids[0];
} elseif ( $parent_featured_valid ) {
$selected_image_id = $parent_featured_id;
} else {
$selected_image_id = 0;
}
if ( ! empty( $variation_gallery_image_ids ) ) {
$gallery_html_ids = $variation_gallery_image_ids;
if ( $selected_image_id && ! in_array( $selected_image_id, $gallery_html_ids, true ) ) {
array_unshift( $gallery_html_ids, $selected_image_id );
}
$variation_gallery_html = wc_get_product_gallery_html( $this, $gallery_html_ids );
}
// See if prices should be shown for each variation after selection.
$show_variation_price = apply_filters( 'woocommerce_show_variation_price', $variation->get_price() === '' || $this->get_variation_sale_price( 'min' ) !== $this->get_variation_sale_price( 'max' ) || $this->get_variation_regular_price( 'min' ) !== $this->get_variation_regular_price( 'max' ), $this, $variation );
return apply_filters(
'woocommerce_available_variation',
array(
'attributes' => $variation->get_variation_attributes(),
'availability_html' => wc_get_stock_html( $variation ),
'backorders_allowed' => $variation->backorders_allowed(),
'dimensions' => $variation->get_dimensions( false ),
'dimensions_html' => wc_format_dimensions( $variation->get_dimensions( false ) ),
'display_price' => wc_get_price_to_display( $variation ),
'display_regular_price' => wc_get_price_to_display( $variation, array( 'price' => $variation->get_regular_price() ) ),
'gallery_image_ids' => $variation_gallery_image_ids,
'gallery_images_html' => $variation_gallery_html,
'image' => wc_get_product_attachment_props( $selected_image_id ),
'image_id' => $selected_image_id,
'is_downloadable' => $variation->is_downloadable(),
'is_in_stock' => $variation->is_in_stock(),
'is_purchasable' => $variation->is_purchasable(),
'is_sold_individually' => $variation->is_sold_individually() ? 'yes' : 'no',
'is_virtual' => $variation->is_virtual(),
'max_qty' => 0 < $variation->get_max_purchase_quantity() ? $variation->get_max_purchase_quantity() : '',
'min_qty' => $variation->get_min_purchase_quantity(),
'price_html' => $show_variation_price ? '<span class="price">' . $variation->get_price_html() . '</span>' : '',
'sku' => $variation->get_sku(),
'variation_description' => wc_format_content( $variation->get_description() ),
'variation_id' => $variation->get_id(),
'variation_is_active' => $variation->variation_is_active(),
'variation_is_visible' => $variation->variation_is_visible(),
'weight' => $variation->get_weight(),
'weight_html' => wc_format_weight( $variation->get_weight() ),
),
$this,
$variation
);
}