'' ); if ( $row > 0 && 0 === $index ) { $attr['loading'] = 'eager'; $attr['fetchpriority'] = 'high'; } elseif ( $row > 0 && ! $phone && $index < $row ) { $attr['loading'] = 'eager'; } $html = wp_get_attachment_image( $attachment_id, $size, false, $attr ); if ( '' === $html || ! self::engine() ) { return $html; } if ( isset( $attr['fetchpriority'] ) ) { return self::lead_paint( $html, $phone ); } return $phone && ! isset( $attr['loading'] ) ? \Rooster\Core\Defer::later_image( $html ) : $html; } private static function lead_paint( string $html, bool $phone ): string { $tags = new \WP_HTML_Tag_Processor( $html ); if ( ! $tags->next_tag( 'img' ) ) { return $html; } $srcset = (string) $tags->get_attribute( 'srcset' ); $sizes = (string) $tags->get_attribute( 'sizes' ); $small = $phone && '' !== $srcset ? \Rooster\Core\Performance::small_candidate( $srcset, self::FIRST_WIDTH ) : ''; if ( '' === $small ) { \Rooster\Core\Performance::lcp_image( (string) $tags->get_attribute( 'src' ), $srcset, $sizes, true ); return $html; } $tags->set_attribute( 'data-rooster-srcset', $srcset ); $tags->set_attribute( 'data-rooster-sizes', $sizes ); $tags->set_attribute( 'src', $small ); $tags->remove_attribute( 'srcset' ); $tags->remove_attribute( 'sizes' ); \Rooster\Core\Performance::lcp_image( $small, '', '', true ); \Rooster\Core\Defer::enqueue(); return $tags->get_updated_html(); } private static function engine(): bool { return method_exists( 'Rooster\Core\Defer', 'later_image' ) && method_exists( 'Rooster\Core\Defer', 'enabled' ) && method_exists( 'Rooster\Core\Defer', 'enqueue' ) && method_exists( 'Rooster\Core\Performance', 'small_candidate' ) && method_exists( 'Rooster\Core\Performance', 'lcp_image' ) && method_exists( 'Rooster\Core\Performance', 'has_lcp' ) && \Rooster\Core\Defer::enabled(); } public static function reset(): void { self::$given = false; } }