Automattic\WooCommerce\Blocks\Utils
ProductGalleryUtils::build_variation_gallery_entry
Build the gallery payload for a single variation, or null when the post isn't a real variation.
Decision tree (variation chosen):
- no variation images → parent featured + parent gallery
- own featured only → variation featured + parent gallery extras
- own featured + gallery (flag on) → variation images only
- gallery only, no own featured (potential AVI shape) → parent featured + variation gallery
Method of the class: ProductGalleryUtils{}
No Hooks.
Returns
Array
Usage
$result = ProductGalleryUtils::build_variation_gallery_entry( $variation_id, $parent_featured_id, $parent_gallery_extras ): ?array;
- $variation_id(int) (required)
- Variation post ID.
- $parent_featured_id(int) (required)
- Parent product's featured image ID (0 if missing/invalid).
- $parent_gallery_extras(int[]) (required)
- Parent gallery image IDs, with the featured filtered out.
ProductGalleryUtils::build_variation_gallery_entry() ProductGalleryUtils::build variation gallery entry code WC 10.9.1
private static function build_variation_gallery_entry( int $variation_id, int $parent_featured_id, array $parent_gallery_extras ): ?array {
$variation = wc_get_product( $variation_id );
if ( ! $variation instanceof \WC_Product_Variation ) {
return null;
}
$featured_id = (int) $variation->get_image_id();
$featured_valid = $featured_id && wp_attachment_is_image( $featured_id );
$variation_gallery_ids = array();
if ( VariationGalleryPackage::is_enabled() ) {
$variation_gallery_ids = array_map( 'intval', $variation->get_gallery_image_ids() );
$variation_gallery_ids = array_filter( $variation_gallery_ids, 'wp_attachment_is_image' );
$variation_gallery_ids = array_values( $variation_gallery_ids );
}
// No images from variation - full parent fallback.
if ( ! $featured_valid && empty( $variation_gallery_ids ) ) {
$parent_image_ids = array_values(
array_filter( array_merge( array( $parent_featured_id ), $parent_gallery_extras ) )
);
if ( empty( $parent_image_ids ) ) {
return array(
'image_id' => 0,
'image_ids' => array( 0 ),
);
}
return array(
'image_id' => $parent_image_ids[0],
'image_ids' => $parent_image_ids,
);
}
// Variation has featured image and gallery - full variation gallery.
if ( ! empty( $variation_gallery_ids ) ) {
$featured = $featured_valid ? $featured_id : $variation_gallery_ids[0];
$image_ids = array_values(
array_unique( array_merge( array( $featured ), $variation_gallery_ids ) )
);
return array(
'image_id' => $featured,
'image_ids' => $image_ids,
);
}
// Variation has only featured image - variation featured and parent gallery.
$image_ids = array_values(
array_unique( array_merge( array( $featured_id ), $parent_gallery_extras ) )
);
return array(
'image_id' => $featured_id,
'image_ids' => $image_ids,
);
}