Можно ли каким-либо образом взять URL-адрес изображения и найти вложение или идентификатор публикации этого изображения в базе данных?
Вот ситуация:
Я нахожусь в цикле, просматривая все теги 'img', которые окружены тегами 'a' в моем посте если атрибут src тега 'img' не совпадает с атрибутом href внешнего тега 'a', то я хочу заменить тег 'img'. При этом, если 'img', который должен быть удален, находится в галерее, я хочу удалить этот пост, а затем поставить его замену 'img' на его место. Я попытался использовать функцию, подобную этой:
function find_image_post_id($url) {
global $wpdb;
$postid = $wpdb->get_var($wpdb->prepare("SELECT DISTINCT ID FROM $wpdb->posts WHERE guid='$url'"));
if ($postid) {
return $postid;
}
return false;
}
Это, очевидно, не правильно, потому что по иронии судьбы не является глобально уникальным. Я (ранее в том же сценарии) загрузил файл с тем же именем (почему? Потому что это было более высокое разрешение, и я пытаюсь заменить версии одного и того же изображения с низким разрешением), и хотя WordPress сохранит изображение с другим именем в каталог, направляющие были установлены одинаковыми. (возможно ошибка).
Есть ли другая техника, которую я могу использовать?
источник
Ответы:
Значительно улучшена функция, разработанная для плагинов, тяжёлых на изображениях:
источник
_wp_attached_file
и_wp_attachment_metadata
?Все эти сложные функции могут быть сведены к одной простой функции:
attachment_url_to_postid ()
Вам нужно только проанализировать URL-адрес изображения, чтобы получить идентификатор вложения:
Это все, что вам нужно.
источник
Я изменил код Рарста, чтобы вы могли сопоставлять только имя файла вместо полного пути. Это полезно, если вы собираетесь загружать изображение, если оно не существует. В настоящее время это работает, только если имена файлов уникальны, но позже я добавлю проверку хеша, чтобы помочь с изображениями с таким же именем файла.
источник
Хорошо, я нашел ответ, которого ни у кого нет в сети, которую я искал несколько дней. Хранить в шахте это работает только , если ваша тема или плагин с помощью ,
WP_Customize_Image_Control()
если вы используете возвращает идентификатор , а не URL - адрес.WP_Customize_Media_Control()
get_theme_mod()
Для моего решения я использовал более новую версию
WP_Customize_Image_Control()
Многие посты на форумах имеют то,
get_attachment_id()
что больше не работает. я использовалattachment_url_to_postid()
Вот как я смог это сделать. Надеюсь, это поможет кому-то там
наценка
источник
Вот альтернативное решение:
Начиная с WP 4.0 они ввели функцию
attachment_url_to_postid()
которая ведет себя аналогично вашейfind_image_post_id()
Пожалуйста, проверьте этот URL для вашей справки.
источник