Получаем ID изображения по его URL
Допустим у нас есть URL какой-то картинки, загруженной в ВП и мы хотим найти ее ID. Родных функций в ВП для этого пока нет, поэтому можно использовать такой код:
Скопировано
function get_attachment_id( $url ) {
$attachment_id = 0;
$upload_dir = wp_upload_dir();
$base_url = $upload_dir['baseurl'] . '/';
// проверим, что URL содержит символы //, а так же ту часть адреса, которая идет в $base_url после них,
// так как URL картинки может не содержать протокол
if( strpos( $url, '//' ) !== false && strpos( $url, explode( '//', $base_url )[1] ) !== false ) {
$file = basename( $url );
$query_args = [
'post_type' => 'attachment',
'post_status' => 'inherit',
'fields' => 'ids',
'posts_per_page' => -1,
'meta_query' => [
[
'value' => $file,
'compare' => 'LIKE',
'key' => '_wp_attachment_metadata',
]
]
];
$query = new WP_Query( $query_args );
if( $query->have_posts() ) {
foreach( $query->posts as $post_id ) {
$meta = wp_get_attachment_metadata( $post_id );
$original_file = basename( $meta['file'] );
$cropped_image_files = wp_list_pluck( $meta['sizes'], 'file' );
if( $original_file === $file || in_array( $file, $cropped_image_files ) ) {
$attachment_id = $post_id;
break;
}
}
}
}
return $attachment_id;
}
Показать код
Пример:
$url = 'https://site.ru/wp-content/uploads/2017/12/image.jpg'; $attachment_id = get_attachment_id( $url );
В качестве URL можно указать не только ссылку на полное изображение, но и ссылку на обрезанное изображение автоматически создаваемое ВП. Например, https://site.ru/wp-content/uploads/2017/12/image-150x150.jpg
. Так же URL картинки может быть указан без протокола и начинаться с символов //.