0, 'attachments_in_quota' => [], 'attachments_out_of_quota' => [], ]; if ( ! Core_Module::is_elementor_one() ) { $images_left = Plugin::instance()->modules_manager->get_modules( 'connect-manager' )->connect_instance->images_left(); if ( ! $images_left ) { throw new Quota_Exceeded_Error( esc_html__( 'Images quota exceeded', 'image-optimization' ) ); } if ( $limit_to_quota ) { $query->set_paging_size( $images_left ); } } $wp_query = $query->execute(); if ( ! $wp_query->post_count ) { return $output; } foreach ( $wp_query->posts as $attachment_id ) { try { Validate_Image::is_valid( $attachment_id ); $wp_meta = new WP_Image_Meta( $attachment_id ); } catch ( Invalid_Image_Exception | Image_Validation_Error $ie ) { continue; } $sizes_count = count( $wp_meta->get_size_keys() ); if ( ! Core_Module::is_elementor_one() ) { if ( $output['total_images_count'] + $sizes_count <= $images_left ) { $output['total_images_count'] += $sizes_count; $output['attachments_in_quota'][] = $attachment_id; } else { break; } } else { $output['total_images_count'] += $sizes_count; $output['attachments_in_quota'][] = $attachment_id; } } $output['attachments_out_of_quota'] = array_diff( $wp_query->posts, $output['attachments_in_quota'] ); return $output; } /** * Looks for images that were optimized, but not all their sizes were processed. * * @return Image_Query_Builder */ public static function query_not_fully_optimized_images(): Image_Query_Builder { $result = []; $sizes_enabled = Settings::get( Settings::CUSTOM_SIZES_OPTION_NAME ); $optimized_images = ( new Image_Query_Builder() ) ->return_optimized_images() ->execute(); foreach ( $optimized_images->posts as $attachment_id ) { try { $image_meta = new Image_Meta( $attachment_id ); $wp_meta = new WP_Image_Meta( $attachment_id ); } catch ( Invalid_Image_Exception $iie ) { continue; } $registered_sizes = $wp_meta->get_size_keys(); $optimized_sizes = $image_meta->get_optimized_sizes(); if ( 'all' !== $sizes_enabled ) { $registered_sizes = array_filter( $registered_sizes, function( $size ) use ( $sizes_enabled ) { return in_array( $size, $sizes_enabled, true ); } ); $optimized_sizes = array_filter( $optimized_sizes, function( $size ) use ( $sizes_enabled ) { return in_array( $size, $sizes_enabled, true ); } ); } if ( count( $optimized_sizes ) < count( $registered_sizes ) ) { $result[] = $attachment_id; } } return ( new Image_Query_Builder() ) ->set_image_ids( $result ); } }