wp_image_file_matches_image_meta

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

WordPress Version: 6.1

/**
 * Determines if the image meta data is for the image source file.
 *
 * The image meta data is retrieved by attachment post ID. In some cases the post IDs may change.
 * For example when the website is exported and imported at another website. Then the
 * attachment post IDs that are in post_content for the exported website may not match
 * the same attachments at the new website.
 *
 * @since 5.5.0
 *
 * @param string $image_location The full path or URI to the image file.
 * @param array  $image_meta     The attachment meta data as returned by 'wp_get_attachment_metadata()'.
 * @param int    $attachment_id  Optional. The image attachment ID. Default 0.
 * @return bool Whether the image meta is for this image file.
 */
function wp_image_file_matches_image_meta($image_location, $image_meta, $attachment_id = 0)
{
    $match = false;
    // Ensure the $image_meta is valid.
    if (isset($image_meta['file']) && strlen($image_meta['file']) > 4) {
        // Remove query args in image URI.
        list($image_location) = explode('?', $image_location);
        // Check if the relative image path from the image meta is at the end of $image_location.
        if (strrpos($image_location, $image_meta['file']) === strlen($image_location) - strlen($image_meta['file'])) {
            $match = true;
        } else {
            // Retrieve the uploads sub-directory from the full size image.
            $dirname = _wp_get_attachment_relative_path($image_meta['file']);
            if ($dirname) {
                $dirname = trailingslashit($dirname);
            }
            if (!empty($image_meta['original_image'])) {
                $relative_path = $dirname . $image_meta['original_image'];
                if (strrpos($image_location, $relative_path) === strlen($image_location) - strlen($relative_path)) {
                    $match = true;
                }
            }
            if (!$match && !empty($image_meta['sizes'])) {
                foreach ($image_meta['sizes'] as $image_size_data) {
                    $relative_path = $dirname . $image_size_data['file'];
                    if (strrpos($image_location, $relative_path) === strlen($image_location) - strlen($relative_path)) {
                        $match = true;
                        break;
                    }
                }
            }
        }
    }
    /**
     * Filters whether an image path or URI matches image meta.
     *
     * @since 5.5.0
     *
     * @param bool   $match          Whether the image relative path from the image meta
     *                               matches the end of the URI or path to the image file.
     * @param string $image_location Full path or URI to the tested image file.
     * @param array  $image_meta     The image meta data as returned by 'wp_get_attachment_metadata()'.
     * @param int    $attachment_id  The image attachment ID or 0 if not supplied.
     */
    return apply_filters('wp_image_file_matches_image_meta', $match, $image_location, $image_meta, $attachment_id);
}

WordPress Version: 5.6

/**
 * Determines if the image meta data is for the image source file.
 *
 * The image meta data is retrieved by attachment post ID. In some cases the post IDs may change.
 * For example when the website is exported and imported at another website. Then the
 * attachment post IDs that are in post_content for the exported website may not match
 * the same attachments at the new website.
 *
 * @since 5.5.0
 *
 * @param string $image_location The full path or URI to the image file.
 * @param array  $image_meta     The attachment meta data as returned by 'wp_get_attachment_metadata()'.
 * @param int    $attachment_id  Optional. The image attachment ID. Default 0.
 * @return bool Whether the image meta is for this image file.
 */
function wp_image_file_matches_image_meta($image_location, $image_meta, $attachment_id = 0)
{
    $match = false;
    // Ensure the $image_meta is valid.
    if (isset($image_meta['file']) && strlen($image_meta['file']) > 4) {
        // Remove quiery args if image URI.
        list($image_location) = explode('?', $image_location);
        // Check if the relative image path from the image meta is at the end of $image_location.
        if (strrpos($image_location, $image_meta['file']) === strlen($image_location) - strlen($image_meta['file'])) {
            $match = true;
        } else {
            // Retrieve the uploads sub-directory from the full size image.
            $dirname = _wp_get_attachment_relative_path($image_meta['file']);
            if ($dirname) {
                $dirname = trailingslashit($dirname);
            }
            if (!empty($image_meta['original_image'])) {
                $relative_path = $dirname . $image_meta['original_image'];
                if (strrpos($image_location, $relative_path) === strlen($image_location) - strlen($relative_path)) {
                    $match = true;
                }
            }
            if (!$match && !empty($image_meta['sizes'])) {
                foreach ($image_meta['sizes'] as $image_size_data) {
                    $relative_path = $dirname . $image_size_data['file'];
                    if (strrpos($image_location, $relative_path) === strlen($image_location) - strlen($relative_path)) {
                        $match = true;
                        break;
                    }
                }
            }
        }
    }
    /**
     * Filters whether an image path or URI matches image meta.
     *
     * @since 5.5.0
     *
     * @param bool   $match          Whether the image relative path from the image meta
     *                               matches the end of the URI or path to the image file.
     * @param string $image_location Full path or URI to the tested image file.
     * @param array  $image_meta     The image meta data as returned by 'wp_get_attachment_metadata()'.
     * @param int    $attachment_id  The image attachment ID or 0 if not supplied.
     */
    return apply_filters('wp_image_file_matches_image_meta', $match, $image_location, $image_meta, $attachment_id);
}

WordPress Version: 5.5

/**
 * Determines if the image meta data is for the image source file.
 *
 * The image meta data is retrieved by attachment post ID. In some cases the post IDs may change.
 * For example when the website is exported and imported at another website. Then the
 * attachment post IDs that are in post_content for the exported website may not match
 * the same attachments at the new website.
 *
 * @since 5.5.0
 *
 * @param string $image_location The full path or URI to the image file.
 * @param array  $image_meta     The attachment meta data as returned by 'wp_get_attachment_metadata()'.
 * @param int    $attachment_id  Optional. The image attachment ID. Default 0.
 * @return bool Whether the image meta is for this image file.
 */
function wp_image_file_matches_image_meta($image_location, $image_meta, $attachment_id = 0)
{
    $match = false;
    // Ensure the $image_meta is valid.
    if (isset($image_meta['file']) && strlen($image_meta['file']) > 4) {
        // Remove quiery args if image URI.
        list($image_location) = explode('?', $image_location);
        // Check if the relative image path from the image meta is at the end of $image_location.
        if (strrpos($image_location, $image_meta['file']) === strlen($image_location) - strlen($image_meta['file'])) {
            $match = true;
        } else {
            // Retrieve the uploads sub-directory from the full size image.
            $dirname = _wp_get_attachment_relative_path($image_meta['file']);
            if ($dirname) {
                $dirname = trailingslashit($dirname);
            }
            if (!empty($image_meta['original_image'])) {
                $relative_path = $dirname . $image_meta['original_image'];
                if (strrpos($image_location, $relative_path) === strlen($image_location) - strlen($relative_path)) {
                    $match = true;
                }
            }
            if (!$match && !empty($image_meta['sizes'])) {
                foreach ($image_meta['sizes'] as $image_size_data) {
                    $relative_path = $dirname . $image_size_data['file'];
                    if (strrpos($image_location, $relative_path) === strlen($image_location) - strlen($relative_path)) {
                        $match = true;
                        break;
                    }
                }
            }
        }
    }
    /**
     * Filter whether an image path or URI matches image meta.
     *
     * @since 5.5.0
     *
     * @param bool   $match          Whether the image relative path from the image meta
     *                               matches the end of the URI or path to the image file.
     * @param string $image_location Full path or URI to the tested image file.
     * @param array  $image_meta     The image meta data as returned by 'wp_get_attachment_metadata()'.
     * @param int    $attachment_id  The image attachment ID or 0 if not supplied.
     */
    return apply_filters('wp_image_file_matches_image_meta', $match, $image_location, $image_meta, $attachment_id);
}