Вопрос или проблема
Я пытаюсь вставить миниатюру изображения поста из моего 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()
, которая только выводит миниатюру для текущей записи, но не позволяет установить её програмно.
Пошаговое руководство:
-
Загрузка изображения на сервер: Вам нужно сначала загрузить изображение по выбранному URL. Для этого мы можем использовать функцию
wp_remote_get()
для получения содержимого изображения иwp_upload_bits()
для сохранения его на сервер. -
Создание вложения (attachment): После загрузки изображения мы должны создать вложение с использованием функции
wp_insert_attachment()
. Это создаст соответствующий объект вложения в базе данных. -
Генерация метаданных вложения: Далее необходимо сгенерировать метаданные для загруженного изображения с помощью
wp_generate_attachment_metadata()
и обновить их с помощьюwp_update_attachment_metadata()
. -
Установка миниатюры к записи: После этих шагов мы можем установить миниатюру для записи с помощью
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 изображения был доступен. Эта процедура позволит значительно улучшить процесс управления изображениями в вашем сайте, повысив его функциональность и привлекательность.