Automattic\WooCommerce\Blocks\Utils

ProductGalleryUtils::build_variation_gallery_entryprivate staticWC 1.0

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. mixed>|null

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() 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,
	);
}