Не вставляются миниатюры изображения в пост wordpress?
Новости с вк приходят на сайт. Пост создается, но не могу установить изображение как миниатюру записи. Вот собственно часть кода, отвечающая непосредственно за выкладывание поста:
$post_text = $data->object->text; //выделяем заголовок при помощи strpos(первое вхождение строки) $first_enter = strpos($post_text, PHP_EOL); $post_title = substr($post_text, 0, $first_enter); //(обрезаем наш заголовок) $post_text = substr($post_text, $first_enter); // (убираем заголовок из текста) $post_text = trim($post_text); //получаем изображение $biggest = new stdClass; $biggest->width = 0; foreach ($data->object->attachments as $attachment) { foreach ($attachment->photo->sizes as $sizes) { if ($biggest->width < $sizes->width) { $biggest = $sizes; } } } $post_images = $biggest->url; // Создаем массив данных новой записи $post_data = array( 'post_title' => $post_title, 'post_content' => $post_text, 'post_status' => 'draft', 'post_date' => date('Y-m-d H:i:s'), 'post_author' => 1, 'post_type' => 'post', ); // Вставляем запись в базу данных $post_id = wp_insert_post($post_data); // присваиваем рубрику к посту wp_set_object_terms($post_id, 'News from vk', 7); if (is_wp_error($post_id)) { echo $post_id->get_error_message(); } // Получаем расширение файла $ext = pathinfo($post_images, PATHINFO_EXTENSION); // Создаем временный файл $temp_file = tmpfile(); // Получаем дескриптор файла $temp_file_meta = stream_get_meta_data($temp_file); $temp_filename = $temp_file_meta['uri']; // Скачиваем картинку и сохраняем ее во временный файл $ch = curl_init($post_images); $fp = fopen($temp_filename, 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp); // Создаем новое вложение в WordPress $attachment_id = media_handle_sideload(array( 'name' => basename($post_images), 'type' => 'image/' . $ext, 'tmp_name' => $temp_filename, ), $post_id); // Проверяем успешность загрузки вложения if (is_wp_error($attachment_id)) { echo 'Ошибка загрузки файла: ' . $attachment_id->get_error_message(); } else { // Добавляем вложение к посту update_post_meta($post_id, '_thumbnail_id', $attachment_id); } |
$post_text = $data->object->text; //выделяем заголовок при помощи strpos(первое вхождение строки) $first_enter = strpos($post_text, PHP_EOL); $post_title = substr($post_text, 0, $first_enter); //(обрезаем наш заголовок) $post_text = substr($post_text, $first_enter); // (убираем заголовок из текста) $post_text = trim($post_text); //получаем изображение $biggest = new stdClass; $biggest->width = 0; foreach ($data->object->attachments as $attachment) { foreach ($attachment->photo->sizes as $sizes) { if ($biggest->width < $sizes->width) { $biggest = $sizes; } } } $post_images = $biggest->url; // Создаем массив данных новой записи $post_data = array( 'post_title' => $post_title, 'post_content' => $post_text, 'post_status' => 'draft', 'post_date' => date('Y-m-d H:i:s'), 'post_author' => 1, 'post_type' => 'post', ); // Вставляем запись в базу данных $post_id = wp_insert_post($post_data); // присваиваем рубрику к посту wp_set_object_terms($post_id, 'News from vk', 7); if (is_wp_error($post_id)) { echo $post_id->get_error_message(); } // Получаем расширение файла $ext = pathinfo($post_images, PATHINFO_EXTENSION); // Создаем временный файл $temp_file = tmpfile(); // Получаем дескриптор файла $temp_file_meta = stream_get_meta_data($temp_file); $temp_filename = $temp_file_meta['uri']; // Скачиваем картинку и сохраняем ее во временный файл $ch = curl_init($post_images); $fp = fopen($temp_filename, 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp); // Создаем новое вложение в WordPress $attachment_id = media_handle_sideload(array( 'name' => basename($post_images), 'type' => 'image/' . $ext, 'tmp_name' => $temp_filename, ), $post_id); // Проверяем успешность загрузки вложения if (is_wp_error($attachment_id)) { echo 'Ошибка загрузки файла: ' . $attachment_id->get_error_message(); } else { // Добавляем вложение к посту update_post_meta($post_id, '_thumbnail_id', $attachment_id); }
чтобы понять что происходит в attachments, прикладываю скрин с json decode
Ссылку то я точно получаю, так как, если вставляю просто в src изображения, то в пост приходит, т.е. просто вставляется в запись... но возможно здесь не нужно конкретно выбирать одно изображение?
Дополнительно:
Нарушение п.3.8 Регламента. Скриншоты фрагментов кода запрещены.
См.п.3.1 Регламента. Также обратите внимание на п.3.4
ЗЫ, тег php тут действительно не нужен и не сделает лучше. Это вопрос по ВП, а не по ЯП.
Ответы:
Вообщем решение нашел. Ссылка в конце не содержала расширения. Поэтому как только в конце ссылки добавил &.jpg, все заработало. Не могу сказать насколько это правильно, но вариант с разрешением загрузки любых файлов в вордпрес мне нравится явно меньше..
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Миниатюра записи в WordPress не ставится простым присваиванием URL. Сначала изображение нужно загрузить в медиабиблиотеку, получить ID вложения и только потом вызвать
set_post_thumbnail().Типовой алгоритм такой:
wp_insert_post()и получить$post_id;media_sideload_image()илиmedia_handle_sideload();require_once ABSPATH . 'wp-admin/includes/media.php'; require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/image.php'; $post_id = wp_insert_post([ 'post_title' => $post_title, 'post_content' => $post_text, 'post_status' => 'publish', 'post_type' => 'post', ]); if (!is_wp_error($post_id) && !empty($post_images)) { $attachment_id = media_sideload_image($post_images, $post_id, null, 'id'); if (!is_wp_error($attachment_id)) { set_post_thumbnail($post_id, $attachment_id); } else { error_log('Image sideload error: ' . $attachment_id->get_error_message()); } }
Проверьте ещё два момента: у темы должна быть включена поддержка миниатюр
add_theme_support('post-thumbnails'), а в данных VK перед обращением к$attachment->photo->sizesнужно проверять, что это действительно фото. Иначе на постах без изображения код будет падать или брать пустой URL.