Как мне отобразить миниатюру PDF в качестве ссылки на 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 в качестве ссылок на сами файлы. Этот метод позволяет избежать дополнительных загрузок изображений и обеспечивает единообразие сгенерированных изображений. Надеюсь, эта информация поможет вам реализовать свое намерение, и вы сможете использовать имеющиеся у вас ресурсы наиболее эффективно.

Оцените материал
Добавить комментарий

Капча загружается...