get_id(), self::LEGACY_META_KEY ) ) { return; } $variation->update_meta_data( self::LEGACY_FALLBACK_DISABLED_META_KEY, 'yes' ); } /** * Mark a variation ID as managed by core so legacy fallback stops applying. * * @param int $variation_id Variation ID managed by core. * @return void */ public static function mark_variation_id_core_managed( int $variation_id ): void { if ( ! metadata_exists( 'post', $variation_id, self::LEGACY_META_KEY ) ) { return; } update_post_meta( $variation_id, self::LEGACY_FALLBACK_DISABLED_META_KEY, 'yes' ); } /** * Determine whether a variation ID is already managed by core. * * @param int $variation_id Variation ID. * @return bool */ public static function is_variation_id_core_managed( int $variation_id ): bool { return metadata_exists( 'post', $variation_id, self::LEGACY_FALLBACK_DISABLED_META_KEY ); } /** * Register compatibility hooks. * * @return void */ public function register() { add_filter( 'woocommerce_product_variation_get_gallery_image_ids', array( $this, 'maybe_read_legacy_gallery_image_ids' ), 10, 2 ); } /** * Use legacy variation gallery meta when the core gallery is empty and the * variation has not been marked as core-managed. * * @param array $gallery_image_ids Gallery image IDs already resolved by core. * @param WC_Product_Variation $variation Variation instance. * @return array */ public function maybe_read_legacy_gallery_image_ids( $gallery_image_ids, WC_Product_Variation $variation ): array { // Core has variation images, just normalize. if ( ! empty( $gallery_image_ids ) ) { return array_values( wp_parse_id_list( $gallery_image_ids ) ); } // Sentinel set: respect the explicit "no images" choice; legacy meta remains for BC. if ( self::is_variation_id_core_managed( $variation->get_id() ) ) { return array(); } $legacy_gallery_image_ids = get_post_meta( $variation->get_id(), self::LEGACY_META_KEY, true ); // Nothing to fall back to. if ( empty( $legacy_gallery_image_ids ) ) { return array(); } // Pre-migration variation: fall back to the legacy extension's meta. return array_values( wp_parse_id_list( $legacy_gallery_image_ids ) ); } }