Automattic\WooCommerce\Internal\VariationGallery

ClassicVariationGalleryAdmin::persist_variation_gallery_fieldpublicWC 1.0

Persist the variation gallery field.

The merchant-facing UI presents featured + gallery as a single ordered list.

Method of the class: ClassicVariationGalleryAdmin{}

No Hooks.

Returns

null. Nothing (null).

Usage

$ClassicVariationGalleryAdmin = new ClassicVariationGalleryAdmin();
$ClassicVariationGalleryAdmin->persist_variation_gallery_field( $variation, $index ): void;
$variation(WC_Product_Variation) (required)
Variation being saved.
$index(int) (required)
Variation row index.

ClassicVariationGalleryAdmin::persist_variation_gallery_field() code WC 10.9.1

public function persist_variation_gallery_field( WC_Product_Variation $variation, int $index ): void {
	// We verify the variation save nonce before firing `woocommerce_admin_process_variation_object`.
	if ( ! isset( $_POST['variable_gallery_image_ids'][ $index ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
		return;
	}

	$unified_ids = wp_parse_id_list( wp_unslash( $_POST['variable_gallery_image_ids'][ $index ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
	$featured_id = (int) ( $unified_ids[0] ?? 0 );
	$gallery_ids = array_values( array_slice( $unified_ids, 1 ) );

	try {
		$variation->set_image_id( $featured_id );
		$variation->set_gallery_image_ids( $gallery_ids );
		LegacyVariationGalleryCompatibility::mark_core_managed( $variation );
	} catch ( \Throwable $e ) {
		Telemetry::record_event(
			Telemetry::EVENT_SAVE_FAILED,
			array(
				'context' => 'classic_admin',
				'reason'  => get_class( $e ),
			)
		);
		throw $e;
	}

	Telemetry::record_event(
		Telemetry::EVENT_SAVE_SUCCEEDED,
		array(
			'context'     => 'classic_admin',
			'image_count' => count( $unified_ids ),
			'is_multi'    => count( $unified_ids ) > 1 ? 'yes' : 'no',
		)
	);
}