get( ClassicVariationGalleryAdmin::class )->register(); $container->get( LegacyVariationGalleryCompatibility::class )->register(); // Action Scheduler initializes on `init`, not `plugins_loaded`. add_action( 'init', array( __CLASS__, 'maybe_schedule_migration' ), 20 ); } /** * Schedule the legacy variation gallery migration if it hasn't already * completed and isn't already pending or running. * * @internal */ public static function maybe_schedule_migration(): void { if ( get_option( Migration::COMPLETED_OPTION ) ) { return; } $args = array( 'update_callback' => array( Migration::class, 'run' ) ); if ( self::has_pending_or_running_migration( $args ) ) { return; } WC()->queue()->add( self::UPDATE_CALLBACK_HOOK, $args, self::UPDATE_CALLBACK_GROUP ); } /** * Determine whether the migration is already pending or running. * * @param array> $args Exact callback args for the migration action. * @return bool */ private static function has_pending_or_running_migration( array $args ): bool { if ( null !== WC()->queue()->get_next( self::UPDATE_CALLBACK_HOOK, $args, self::UPDATE_CALLBACK_GROUP ) ) { return true; } $running_actions = WC()->queue()->search( array( 'hook' => self::UPDATE_CALLBACK_HOOK, 'args' => $args, 'status' => \ActionScheduler_Store::STATUS_RUNNING, 'per_page' => 1, 'group' => self::UPDATE_CALLBACK_GROUP, ), 'ids' ); return ! empty( $running_actions ); } }