@rvitalia

Не вставляются миниатюры изображения в пост 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);
        }

чтобы понять что происходит в attachments, прикладываю скрин с json decode
64c886c0afa8d269890008.png
Ссылку то я точно получаю, так как, если вставляю просто в src изображения, то в пост приходит, т.е. просто вставляется в запись... но возможно здесь не нужно конкретно выбирать одно изображение?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
@rvitalia Автор вопроса
Вообщем решение нашел. Ссылка в конце не содержала расширения. Поэтому как только в конце ссылки добавил &.jpg, все заработало. Не могу сказать насколько это правильно, но вариант с разрешением загрузки любых файлов в вордпрес мне нравится явно меньше..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы