get_header_image_tag

The timeline below displays how wordpress function get_header_image_tag has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.4

/**
 * Creates image tag markup for a custom header image.
 *
 * @since 4.4.0
 *
 * @param array $attr Optional. Additional attributes for the image tag. Can be used
 *                              to override the default attributes. Default empty.
 * @return string HTML image element markup or empty string on failure.
 */
function get_header_image_tag($attr = array())
{
    $header = get_custom_header();
    $header->url = get_header_image();
    if (!$header->url) {
        return '';
    }
    $width = absint($header->width);
    $height = absint($header->height);
    $alt = '';
    // Use alternative text assigned to the image, if available. Otherwise, leave it empty.
    if (!empty($header->attachment_id)) {
        $image_alt = get_post_meta($header->attachment_id, '_wp_attachment_image_alt', true);
        if (is_string($image_alt)) {
            $alt = $image_alt;
        }
    }
    $attr = wp_parse_args($attr, array('src' => $header->url, 'width' => $width, 'height' => $height, 'alt' => $alt));
    // Generate 'srcset' and 'sizes' if not already present.
    if (empty($attr['srcset']) && !empty($header->attachment_id)) {
        $image_meta = get_post_meta($header->attachment_id, '_wp_attachment_metadata', true);
        $size_array = array($width, $height);
        if (is_array($image_meta)) {
            $srcset = wp_calculate_image_srcset($size_array, $header->url, $image_meta, $header->attachment_id);
            if (!empty($attr['sizes'])) {
                $sizes = $attr['sizes'];
            } else {
                $sizes = wp_calculate_image_sizes($size_array, $header->url, $image_meta, $header->attachment_id);
            }
            if ($srcset && $sizes) {
                $attr['srcset'] = $srcset;
                $attr['sizes'] = $sizes;
            }
        }
    }
    $attr = array_merge($attr, wp_get_loading_optimization_attributes('img', $attr, 'get_header_image_tag'));
    /*
     * If the default value of `lazy` for the `loading` attribute is overridden
     * to omit the attribute for this image, ensure it is not included.
     */
    if (isset($attr['loading']) && !$attr['loading']) {
        unset($attr['loading']);
    }
    // If the `fetchpriority` attribute is overridden and set to false or an empty string.
    if (isset($attr['fetchpriority']) && !$attr['fetchpriority']) {
        unset($attr['fetchpriority']);
    }
    // If the `decoding` attribute is overridden and set to false or an empty string.
    if (isset($attr['decoding']) && !$attr['decoding']) {
        unset($attr['decoding']);
    }
    /**
     * Filters the list of header image attributes.
     *
     * @since 5.9.0
     *
     * @param array  $attr   Array of the attributes for the image tag.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     */
    $attr = apply_filters('get_header_image_tag_attributes', $attr, $header);
    $attr = array_map('esc_attr', $attr);
    $html = '<img';
    foreach ($attr as $name => $value) {
        $html .= ' ' . $name . '="' . $value . '"';
    }
    $html .= ' />';
    /**
     * Filters the markup of header images.
     *
     * @since 4.4.0
     *
     * @param string $html   The HTML image tag markup being filtered.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     * @param array  $attr   Array of the attributes for the image tag.
     */
    return apply_filters('get_header_image_tag', $html, $header, $attr);
}

WordPress Version: 6.3

/**
 * Creates image tag markup for a custom header image.
 *
 * @since 4.4.0
 *
 * @param array $attr Optional. Additional attributes for the image tag. Can be used
 *                              to override the default attributes. Default empty.
 * @return string HTML image element markup or empty string on failure.
 */
function get_header_image_tag($attr = array())
{
    $header = get_custom_header();
    $header->url = get_header_image();
    if (!$header->url) {
        return '';
    }
    $width = absint($header->width);
    $height = absint($header->height);
    $alt = '';
    // Use alternative text assigned to the image, if available. Otherwise, leave it empty.
    if (!empty($header->attachment_id)) {
        $image_alt = get_post_meta($header->attachment_id, '_wp_attachment_image_alt', true);
        if (is_string($image_alt)) {
            $alt = $image_alt;
        }
    }
    $attr = wp_parse_args($attr, array('src' => $header->url, 'width' => $width, 'height' => $height, 'alt' => $alt, 'decoding' => 'async'));
    // Generate 'srcset' and 'sizes' if not already present.
    if (empty($attr['srcset']) && !empty($header->attachment_id)) {
        $image_meta = get_post_meta($header->attachment_id, '_wp_attachment_metadata', true);
        $size_array = array($width, $height);
        if (is_array($image_meta)) {
            $srcset = wp_calculate_image_srcset($size_array, $header->url, $image_meta, $header->attachment_id);
            if (!empty($attr['sizes'])) {
                $sizes = $attr['sizes'];
            } else {
                $sizes = wp_calculate_image_sizes($size_array, $header->url, $image_meta, $header->attachment_id);
            }
            if ($srcset && $sizes) {
                $attr['srcset'] = $srcset;
                $attr['sizes'] = $sizes;
            }
        }
    }
    $attr = array_merge($attr, wp_get_loading_optimization_attributes('img', $attr, 'get_header_image_tag'));
    /*
     * If the default value of `lazy` for the `loading` attribute is overridden
     * to omit the attribute for this image, ensure it is not included.
     */
    if (isset($attr['loading']) && !$attr['loading']) {
        unset($attr['loading']);
    }
    // If the `fetchpriority` attribute is overridden and set to false or an empty string.
    if (isset($attr['fetchpriority']) && !$attr['fetchpriority']) {
        unset($attr['fetchpriority']);
    }
    // If the `decoding` attribute is overridden and set to false or an empty string.
    if (isset($attr['decoding']) && !$attr['decoding']) {
        unset($attr['decoding']);
    }
    /**
     * Filters the list of header image attributes.
     *
     * @since 5.9.0
     *
     * @param array  $attr   Array of the attributes for the image tag.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     */
    $attr = apply_filters('get_header_image_tag_attributes', $attr, $header);
    $attr = array_map('esc_attr', $attr);
    $html = '<img';
    foreach ($attr as $name => $value) {
        $html .= ' ' . $name . '="' . $value . '"';
    }
    $html .= ' />';
    /**
     * Filters the markup of header images.
     *
     * @since 4.4.0
     *
     * @param string $html   The HTML image tag markup being filtered.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     * @param array  $attr   Array of the attributes for the image tag.
     */
    return apply_filters('get_header_image_tag', $html, $header, $attr);
}

WordPress Version: 5.9

/**
 * Creates image tag markup for a custom header image.
 *
 * @since 4.4.0
 *
 * @param array $attr Optional. Additional attributes for the image tag. Can be used
 *                              to override the default attributes. Default empty.
 * @return string HTML image element markup or empty string on failure.
 */
function get_header_image_tag($attr = array())
{
    $header = get_custom_header();
    $header->url = get_header_image();
    if (!$header->url) {
        return '';
    }
    $width = absint($header->width);
    $height = absint($header->height);
    $alt = '';
    // Use alternative text assigned to the image, if available. Otherwise, leave it empty.
    if (!empty($header->attachment_id)) {
        $image_alt = get_post_meta($header->attachment_id, '_wp_attachment_image_alt', true);
        if (is_string($image_alt)) {
            $alt = $image_alt;
        }
    }
    $attr = wp_parse_args($attr, array('src' => $header->url, 'width' => $width, 'height' => $height, 'alt' => $alt));
    // Generate 'srcset' and 'sizes' if not already present.
    if (empty($attr['srcset']) && !empty($header->attachment_id)) {
        $image_meta = get_post_meta($header->attachment_id, '_wp_attachment_metadata', true);
        $size_array = array($width, $height);
        if (is_array($image_meta)) {
            $srcset = wp_calculate_image_srcset($size_array, $header->url, $image_meta, $header->attachment_id);
            if (!empty($attr['sizes'])) {
                $sizes = $attr['sizes'];
            } else {
                $sizes = wp_calculate_image_sizes($size_array, $header->url, $image_meta, $header->attachment_id);
            }
            if ($srcset && $sizes) {
                $attr['srcset'] = $srcset;
                $attr['sizes'] = $sizes;
            }
        }
    }
    /**
     * Filters the list of header image attributes.
     *
     * @since 5.9.0
     *
     * @param array  $attr   Array of the attributes for the image tag.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     */
    $attr = apply_filters('get_header_image_tag_attributes', $attr, $header);
    $attr = array_map('esc_attr', $attr);
    $html = '<img';
    foreach ($attr as $name => $value) {
        $html .= ' ' . $name . '="' . $value . '"';
    }
    $html .= ' />';
    /**
     * Filters the markup of header images.
     *
     * @since 4.4.0
     *
     * @param string $html   The HTML image tag markup being filtered.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     * @param array  $attr   Array of the attributes for the image tag.
     */
    return apply_filters('get_header_image_tag', $html, $header, $attr);
}

WordPress Version: 5.5

/**
 * Creates image tag markup for a custom header image.
 *
 * @since 4.4.0
 *
 * @param array $attr Optional. Additional attributes for the image tag. Can be used
 *                              to override the default attributes. Default empty.
 * @return string HTML image element markup or empty string on failure.
 */
function get_header_image_tag($attr = array())
{
    $header = get_custom_header();
    $header->url = get_header_image();
    if (!$header->url) {
        return '';
    }
    $width = absint($header->width);
    $height = absint($header->height);
    $attr = wp_parse_args($attr, array('src' => $header->url, 'width' => $width, 'height' => $height, 'alt' => get_bloginfo('name')));
    // Generate 'srcset' and 'sizes' if not already present.
    if (empty($attr['srcset']) && !empty($header->attachment_id)) {
        $image_meta = get_post_meta($header->attachment_id, '_wp_attachment_metadata', true);
        $size_array = array($width, $height);
        if (is_array($image_meta)) {
            $srcset = wp_calculate_image_srcset($size_array, $header->url, $image_meta, $header->attachment_id);
            $sizes = (!empty($attr['sizes'])) ? $attr['sizes'] : wp_calculate_image_sizes($size_array, $header->url, $image_meta, $header->attachment_id);
            if ($srcset && $sizes) {
                $attr['srcset'] = $srcset;
                $attr['sizes'] = $sizes;
            }
        }
    }
    $attr = array_map('esc_attr', $attr);
    $html = '<img';
    foreach ($attr as $name => $value) {
        $html .= ' ' . $name . '="' . $value . '"';
    }
    $html .= ' />';
    /**
     * Filters the markup of header images.
     *
     * @since 4.4.0
     *
     * @param string $html   The HTML image tag markup being filtered.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     * @param array  $attr   Array of the attributes for the image tag.
     */
    return apply_filters('get_header_image_tag', $html, $header, $attr);
}

WordPress Version: 4.7

/**
 * Create image tag markup for a custom header image.
 *
 * @since 4.4.0
 *
 * @param array $attr Optional. Additional attributes for the image tag. Can be used
 *                              to override the default attributes. Default empty.
 * @return string HTML image element markup or empty string on failure.
 */
function get_header_image_tag($attr = array())
{
    $header = get_custom_header();
    $header->url = get_header_image();
    if (!$header->url) {
        return '';
    }
    $width = absint($header->width);
    $height = absint($header->height);
    $attr = wp_parse_args($attr, array('src' => $header->url, 'width' => $width, 'height' => $height, 'alt' => get_bloginfo('name')));
    // Generate 'srcset' and 'sizes' if not already present.
    if (empty($attr['srcset']) && !empty($header->attachment_id)) {
        $image_meta = get_post_meta($header->attachment_id, '_wp_attachment_metadata', true);
        $size_array = array($width, $height);
        if (is_array($image_meta)) {
            $srcset = wp_calculate_image_srcset($size_array, $header->url, $image_meta, $header->attachment_id);
            $sizes = (!empty($attr['sizes'])) ? $attr['sizes'] : wp_calculate_image_sizes($size_array, $header->url, $image_meta, $header->attachment_id);
            if ($srcset && $sizes) {
                $attr['srcset'] = $srcset;
                $attr['sizes'] = $sizes;
            }
        }
    }
    $attr = array_map('esc_attr', $attr);
    $html = '<img';
    foreach ($attr as $name => $value) {
        $html .= ' ' . $name . '="' . $value . '"';
    }
    $html .= ' />';
    /**
     * Filters the markup of header images.
     *
     * @since 4.4.0
     *
     * @param string $html   The HTML image tag markup being filtered.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     * @param array  $attr   Array of the attributes for the image tag.
     */
    return apply_filters('get_header_image_tag', $html, $header, $attr);
}

WordPress Version: 4.6

/**
 * Create image tag markup for a custom header image.
 *
 * @since 4.4.0
 *
 * @param array $attr Optional. Additional attributes for the image tag. Can be used
 *                              to override the default attributes. Default empty.
 * @return string HTML image element markup or empty string on failure.
 */
function get_header_image_tag($attr = array())
{
    $header = get_custom_header();
    if (empty($header->url)) {
        return '';
    }
    $width = absint($header->width);
    $height = absint($header->height);
    $attr = wp_parse_args($attr, array('src' => $header->url, 'width' => $width, 'height' => $height, 'alt' => get_bloginfo('name')));
    // Generate 'srcset' and 'sizes' if not already present.
    if (empty($attr['srcset']) && !empty($header->attachment_id)) {
        $image_meta = get_post_meta($header->attachment_id, '_wp_attachment_metadata', true);
        $size_array = array($width, $height);
        if (is_array($image_meta)) {
            $srcset = wp_calculate_image_srcset($size_array, $header->url, $image_meta, $header->attachment_id);
            $sizes = (!empty($attr['sizes'])) ? $attr['sizes'] : wp_calculate_image_sizes($size_array, $header->url, $image_meta, $header->attachment_id);
            if ($srcset && $sizes) {
                $attr['srcset'] = $srcset;
                $attr['sizes'] = $sizes;
            }
        }
    }
    $attr = array_map('esc_attr', $attr);
    $html = '<img';
    foreach ($attr as $name => $value) {
        $html .= ' ' . $name . '="' . $value . '"';
    }
    $html .= ' />';
    /**
     * Filters the markup of header images.
     *
     * @since 4.4.0
     *
     * @param string $html   The HTML image tag markup being filtered.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     * @param array  $attr   Array of the attributes for the image tag.
     */
    return apply_filters('get_header_image_tag', $html, $header, $attr);
}

WordPress Version: 4.4

/**
 * Create image tag markup for a custom header image.
 *
 * @since 4.4.0
 *
 * @param array $attr Optional. Additional attributes for the image tag. Can be used
 *                              to override the default attributes. Default empty.
 * @return string HTML image element markup or empty string on failure.
 */
function get_header_image_tag($attr = array())
{
    $header = get_custom_header();
    if (empty($header->url)) {
        return '';
    }
    $width = absint($header->width);
    $height = absint($header->height);
    $attr = wp_parse_args($attr, array('src' => $header->url, 'width' => $width, 'height' => $height, 'alt' => get_bloginfo('name')));
    // Generate 'srcset' and 'sizes' if not already present.
    if (empty($attr['srcset']) && !empty($header->attachment_id)) {
        $image_meta = get_post_meta($header->attachment_id, '_wp_attachment_metadata', true);
        $size_array = array($width, $height);
        if (is_array($image_meta)) {
            $srcset = wp_calculate_image_srcset($size_array, $header->url, $image_meta, $header->attachment_id);
            $sizes = (!empty($attr['sizes'])) ? $attr['sizes'] : wp_calculate_image_sizes($size_array, $header->url, $image_meta, $header->attachment_id);
            if ($srcset && $sizes) {
                $attr['srcset'] = $srcset;
                $attr['sizes'] = $sizes;
            }
        }
    }
    $attr = array_map('esc_attr', $attr);
    $html = '<img';
    foreach ($attr as $name => $value) {
        $html .= ' ' . $name . '="' . $value . '"';
    }
    $html .= ' />';
    /**
     * Filter the markup of header images.
     *
     * @since 4.4.0
     *
     * @param string $html   The HTML image tag markup being filtered.
     * @param object $header The custom header object returned by 'get_custom_header()'.
     * @param array  $attr   Array of the attributes for the image tag.
     */
    return apply_filters('get_header_image_tag', $html, $header, $attr);
}