Ильдар Сарибжанов | 19.11.2013

Получить id картинки по url в wordpress

Сразу к делу

В wordpress есть встроенная функция получения url проложенной картинки по ее id.

$url = wp_get_attachment_image_src($id_img, 'thumbnail');
echo $url[0];

Код вернет массив из 3х элементов: url изображения, ширина, высота.

Если необходимо получить url файла произвоьного формата, то нобходимо использовать иной код

$url = get_attachment_link( $attachment_id );
echo $url;

А вот этот код отдаст только url без других параметров

Это может быть не только картинка. К сожалению я не нашел обратного тега, т.е. нет встроенной функции получения id картинки по ее url, может плохо искал? Поскольку все приложенные файлы являются объектами основной таблицы posts, то можно создать свой тег, добавив следующий код в файл functons.php в папке активной темы:

function get_attachment_id_by_url( $url ) {
	global $wpdb;
 
 	// таблица постов, там же перечисленны и медиафайлы
	$table  = $wpdb->prefix . 'posts';
	$attachment_id = $wpdb->get_var( 
		$wpdb->prepare( "SELECT ID FROM $table WHERE guid RLIKE %s", $url ) 
	);
	// Returns id
	return $attachment_id;
}

Вот такой незамысловатый код. Функция get_var вернет одну ячейку таблицы, для нас необходимо получить ячейку guid, внутри этой функции используется экранирующая функция prepare, которая должна защитить от sql-инъекции в базу данный. На выходе получаем id из базы. 

Функцию можно использовать вот так: 

echo function get_attachment_id_by_url( $url_img );  // выведет id изображения

А зачем это надо?

Лично я использовал чтобы создать галерею. Я знаю, что в wordpress уже есть встроенная галерея, но мне почему-то не захотелось ее стилизовать и я пошел по пути, которое счел простым: в стандартный редактор WYSIWYG пользователь кидает изображения, а я уже выдергиваю из текста картинки и вывожу сверстанную галерею, содержащую пользовательские изображения. Но модератор сайта может загрузить и 5000х5000 пикселей, поэтому лучше использовать те картинки, которые движок сожмет, вы же в курсе, что wordpress создает несколько копий исходного изображения разного формата: для миниатюры, среднего и крупного изображения. Размер этих изображений можно задать в настройках блога — параметры->медиафайлы.

А дальше дело техники. Используя код в начале этого поста, берем картинку подходящего размера и выводим конечному пользователю сайта