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);
}