wpseek.com
A WordPress-centric search engine for devs and theme authors



wp_maybe_add_fetchpriority_high_attr › WordPress Function

Since6.3.0
Deprecatedn/a
wp_maybe_add_fetchpriority_high_attr ( $loading_attrs, $tag_name, $attr )
Access:
  • private
Parameters: (3)
  • (array<string,string>) $loading_attrs Array of the loading optimization attributes for the element.
    Required: Yes
  • (string) $tag_name The tag name.
    Required: Yes
  • (array<string,mixed>) $attr Array of the attributes for the element.
    Required: Yes
Returns:
  • (array<string,string>) Updated loading optimization attributes for the element.
Defined at:
Codex:
Change Log:
  • 7.0.0

Determines whether to add `fetchpriority='high'` to loading attributes.



Source

function wp_maybe_add_fetchpriority_high_attr( $loading_attrs, $tag_name, $attr ) {
	// For now, adding `fetchpriority="high"` is only supported for images.
	if ( 'img' !== $tag_name ) {
		return $loading_attrs;
	}

	$existing_fetchpriority = $attr['fetchpriority'] ?? null;
	if ( null !== $existing_fetchpriority && 'auto' !== $existing_fetchpriority ) {
		/*
		 * When an IMG has been explicitly marked with `fetchpriority=high`, then honor that this is the element that
		 * should have the priority. In contrast, the Navigation block may add `fetchpriority=low` to an IMG which
		 * appears in the Navigation Overlay; such images should never be considered candidates for
		 * `fetchpriority=high`. Lastly, block visibility may add `fetchpriority=auto` to an IMG when the block is
		 * conditionally displayed based on viewport size. Such an image is considered an LCP element candidate if it
		 * exceeds the threshold for the minimum number of square pixels.
		 */
		if ( 'high' === $existing_fetchpriority ) {
			$loading_attrs['fetchpriority'] = 'high';
			wp_high_priority_element_flag( false );
		}

		return $loading_attrs;
	}

	// Lazy-loading and `fetchpriority="high"` are mutually exclusive.
	if ( isset( $loading_attrs['loading'] ) && 'lazy' === $loading_attrs['loading'] ) {
		return $loading_attrs;
	}

	if ( ! wp_high_priority_element_flag() ) {
		return $loading_attrs;
	}

	/**
	 * Filters the minimum square-pixels threshold for an image to be eligible as the high-priority image.
	 *
	 * @since 6.3.0
	 *
	 * @param int $threshold Minimum square-pixels threshold. Default 50000.
	 */
	$wp_min_priority_img_pixels = apply_filters( 'wp_min_priority_img_pixels', 50000 );

	if ( $wp_min_priority_img_pixels <= $attr['width'] * $attr['height'] ) {
		if ( 'auto' !== $existing_fetchpriority ) {
			$loading_attrs['fetchpriority'] = 'high';
		}
		wp_high_priority_element_flag( false );
	}

	return $loading_attrs;
}