вставить миниатюру изображения из php-скрипта

Вопрос или проблема

Я пытаюсь вставить миниатюру изображения поста из моего PHP-скрипта. Он вставляет пост, содержимое, ссылку на загрузку, и мне только нужно установить миниатюру изображения, чтобы завершить мой скрипт. Это мой код, но я не могу понять, почему он не работает, любая помощь будет оценена:

    $url = "http://www.test.com/wp-content/uploads/2015/12/".$title[$key1].".png";

$attr = array(
'src'   => basename($url),
'class' => "alignleft",
'alt'   => '',
'title' => trim( strip_tags( 'Логотип' ) )
);
the_post_thumbnail('thumbnail', $attr );

Вам стоит взглянуть на wp_insert_attachment и wp_generate_attachment_metadata.

Вы не можете вставить изображение миниатюры/обложку, используя the_post_thumbnail – эта функция только получает миниатюру для текущего поста.

Смотрите: http://codex.wordpress.org/Function_Reference/wp_insert_attachment
и http://codex.wordpress.org/Function_Reference/wp_generate_attachment_metadata

Чтобы установить миниатюру для поста, вы должны загрузить файл на свой сервер. Используйте функцию ниже, чтобы загрузить файл по URL:

function upload_file($image_url, $post_id)
{
    $image = $image_url;

    $get = wp_remote_get($image);

    $type = wp_remote_retrieve_header($get, 'content-type');

    if (!$type) {
        return false;
    }

    $mirror = wp_upload_bits(basename($image), '', wp_remote_retrieve_body($get));

    $attachment = array(
        'post_title' => basename($image),
        'post_mime_type' => $type
    );

    $attach_id = wp_insert_attachment($attachment, $mirror['file'], $post_id);

    require_once(ABSPATH . 'wp-admin/includes/image.php');

    $attach_data = wp_generate_attachment_metadata($attach_id, $mirror['file']);

    wp_update_attachment_metadata($attach_id, $attach_data);

    return $attach_id;
}

Затем выполните функцию:

$url="http://yoursite.com/photo.jpg";
$post_id = 56;

upload_file($url, $post_id);

.

Ответ или решение

Чтобы вставить изображение миниатюры в запись WordPress с помощью PHP-скрипта, необходимо выполнить несколько шагов, начиная с загрузки изображения на сервер и заканчивая его привязкой к конкретной записи (post). В вашей текущей реализации используется функция the_post_thumbnail(), которая только выводит миниатюру для текущей записи, но не позволяет установить её програмно.

Пошаговое руководство:

  1. Загрузка изображения на сервер: Вам нужно сначала загрузить изображение по выбранному URL. Для этого мы можем использовать функцию wp_remote_get() для получения содержимого изображения и wp_upload_bits() для сохранения его на сервер.

  2. Создание вложения (attachment): После загрузки изображения мы должны создать вложение с использованием функции wp_insert_attachment(). Это создаст соответствующий объект вложения в базе данных.

  3. Генерация метаданных вложения: Далее необходимо сгенерировать метаданные для загруженного изображения с помощью wp_generate_attachment_metadata() и обновить их с помощью wp_update_attachment_metadata().

  4. Установка миниатюры к записи: После этих шагов мы можем установить миниатюру для записи с помощью set_post_thumbnail().

Вот пример того, как это можно сделать в вашем случае:

function upload_file($image_url, $post_id) {
    // Получаем содержимое изображения
    $get = wp_remote_get($image_url);
    if (is_wp_error($get)) {
        return false;
    }

    $type = wp_remote_retrieve_header($get, 'content-type');
    if (!$type) {
        return false;
    }

    // Загружаем изображение в директорию загрузок
    $mirror = wp_upload_bits(basename($image_url), '', wp_remote_retrieve_body($get));
    if ($mirror['error']) {
        return false;
    }

    // Создаем вложение
    $attachment = array(
        'post_title' => basename($image_url),
        'post_mime_type' => $type,
        'post_content' => '',
        'post_status' => 'inherit'
    );

    $attach_id = wp_insert_attachment($attachment, $mirror['file'], $post_id);

    // Генерируем метаданные для вложения
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    $attach_data = wp_generate_attachment_metadata($attach_id, $mirror['file']);
    wp_update_attachment_metadata($attach_id, $attach_data);

    // Устанавливаем миниатюру для записи
    set_post_thumbnail($post_id, $attach_id);

    return $attach_id; // Возвращаем id вложения
}

// Пример использования функции
$image_url = "http://www.test.com/wp-content/uploads/2015/12/image.png";
$post_id = 56; // ID вашей записи
upload_file($image_url, $post_id);

Подробности кода:

  • wp_remote_get(): получает содержимое изображения по его URL.
  • wp_upload_bits(): загружает файл в папку загрузок WordPress и возвращает массив с результатами.
  • wp_insert_attachment(): создает запись для вложения в базе данных.
  • wp_generate_attachment_metadata(): генерирует метаданные для изображения, такие как размеры миниатюры.
  • set_post_thumbnail(): связывает загруженное изображение с записью как миниатюру.

Заключение

С помощью приведенной выше функции вы сможете программно вставить миниатюру в запись на WordPress. Убедитесь, что у вас есть соответствующие права на запись в каталог загрузок, и проверьте, чтобы URL изображения был доступен. Эта процедура позволит значительно улучшить процесс управления изображениями в вашем сайте, повысив его функциональность и привлекательность.

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

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