- Вопрос или проблема
- Извлечение изображения из PDF
- Пример
- Установить миниатюру поста
- Ответ или решение
- Как отобразить эскиз PDF в качестве ссылки на PDF без загрузки изображения
- 1. Понимание хранения эскизов в WordPress
- 2. Извлечение URL-адреса изображения
- 3. Создание объекта аттачмента
- 4. Установка миниатюры поста
- 5. Вставка ссылки на PDF
- Заключение
Вопрос или проблема
Когда я несколько лет назад узнал, что WordPress будет создавать миниатюры загруженных PDF-файлов, я был так счастлив, думая, что не придётся создавать и загружать отдельные изображения обложек PDF, чтобы миниатюра отображалась на моём сайте как ссылка на PDF. После некоторых усилий я обнаружил, что изображения, созданные из загруженных PDF, недоступны для отображения на любой публичной веб-странице. Мне кажется логичным, что поскольку эти файлы создаются, когда я загружаю PDF, я должен иметь возможность к ним получить доступ, но это невозможно. Я хочу уточнить, что я не хочу встраивать PDF (некоторые из них очень большие), я просто хочу, чтобы автоматически сгенерированная миниатюра была ссылкой на PDF.
Я попробовал плагин PDF Thumbnails, но он неудобен в использовании и не использует автоматически созданные изображения; ему приходится создавать свои собственные.
Это кажется такой простой и очевидной задачей, что я действительно удивлён, что это невозможно “из коробки”. Если я вижу миниатюру в админке, почему я не могу увидеть её и на живом сайте?
Пост Заставить документы появляться в диалоговом окне “Изображение записи” не помогает, потому что тема Twenty Twenty-three не имеет типичного файла functions.php и файлов шаблонов для типа поста, по крайней мере, на которые я могу наткнуться. Также должен отметить, что я использую мультисайт.
Спасибо.
Изображения PDF, созданные WordPress, хранятся в метаданных объекта вложения PDF.
[
{
"id": 121,
"media_type": "file",
"mime_type": "application/pdf",
...
"media_details": {
"sizes": {
"full": {
...
"source_url": "<домен>/wp-content/uploads/document-name-pdf.jpg"
}
}
]
Извлечение изображения из PDF
Добавление блока изображения или добавление изображения записи к посту требует идентификатора вложения ID
, а не просто URL вероятно
Идентификатор вложения ID
можно создать путем “параллельной загрузки” url
в медиабиблиотеку, чтобы создать вложение с помощью функции media_sideload_image
, которая может вернуть только что созданный идентификатор вложения ID
Пример
$pdf_image_url = $PDF_object -> media_details -> sizes -> full -> source_url;
$attachment_id = media_sideload_image(
$pdf_image_url,
$post_id, // пост, к которому нужно прикрепить изображение
'Мой заголовок изображения',
$return_type="id"
);
$image = set_post_thumbnail( $post_id, $attachment_id );
Установить миниатюру поста
Функция set_post_thumbnail( $post_id, $attachment_id )
может использоваться для назначения изображения посту в качестве миниатюры
.
Ответ или решение
Как отобразить эскиз PDF в качестве ссылки на PDF без загрузки изображения
Вам удалось найти решение, позволяющее WordPress автоматически генерировать эскизы для загруженных PDF, однако, вы столкнулись с трудностями при их использовании на вашем сайте. Основная причина заключается в том, что эти изображения не являются доступными для публикации на страницах. Ниже приведен подробный план, как вы можете обойти это ограничение и использовать автоматически сгенерированные эскизы PDF в качестве ссылок.
1. Понимание хранения эскизов в WordPress
При загрузке PDF-файлов WordPress создает эскизы и хранит их в метаданных объекта атачмента. В частности, информация о изображении хранится в структуре метаданных. Вы можете извлечь URL-адрес изображения из этих метаданных. Вот пример структуры метаданных:
[
{
"id": 121,
"media_type": "file",
"mime_type": "application/pdf",
...
"media_details": {
"sizes": {
"full": {
"source_url": "<domain>/wp-content/uploads/document-name-pdf.jpg"
}
}
}
}
]
2. Извлечение URL-адреса изображения
Используйте следующий код, чтобы извлечь URL изображения из метаданных:
$pdf_object = /* Получить объект PDF-атачмента */;
$pdf_image_url = $pdf_object->media_details->sizes->full->source_url;
Теперь у вас есть URL для изображения, которое вы хотите использовать в качестве ссылки на PDF.
3. Создание объекта аттачмента
Проблема заключается в том, что вы не можете просто использовать URL для изображений, вам нужно создать объект аттачмента, используя функцию media_sideload_image
. Эта функция позволяет "подцепить" изображение из URL в вашу медиабиблиотеку и вернуть ID нового аттачмента:
$post_id = /* ID вашего поста */;
$attachment_id = media_sideload_image(
$pdf_image_url,
$post_id,
'My image title',
'id'
);
4. Установка миниатюры поста
После создания ID атачмента, вы можете использовать его для установки миниатюры поста с помощью функции set_post_thumbnail
:
$image = set_post_thumbnail($post_id, $attachment_id);
Таким образом, вы устанавливаете созданный эскиз в качестве миниатюры к вашему посту.
5. Вставка ссылки на PDF
Теперь, когда у вас есть миниатюра, вы можете отобразить ее на странице, используя следующий HTML-код:
<a href="<URL на PDF>" target="_blank">
<img src="<URL на эскиз>" alt="Описание PDF" />
</a>
Здесь замените <URL на PDF>
на фактический URL вашего PDF-документа, а <URL на эскиз>
на URL, который вы получили при извлечении изображения.
Заключение
Теперь вы знаете, как использовать автоматически сгенерированные эскизы PDF в WordPress в качестве ссылок на сами файлы. Этот метод позволяет избежать дополнительных загрузок изображений и обеспечивает единообразие сгенерированных изображений. Надеюсь, эта информация поможет вам реализовать свое намерение, и вы сможете использовать имеющиеся у вас ресурсы наиболее эффективно.