Генерация Thumbnail при wp_insert_post

Здравствуйте.
Кто-то сталкивался с генерацией превьюшек поста при генерации самого поста.

После работы wp_insert_post у меня есть ID нового поста, так же у меня есть URL картинки, которую я хочу поставить как превьюшку к посту.
Как это сделать? Скажите пожалуйста.

А в чём проблема?

if ( has_post_thumbnail() ) {
    the_post_thumbnail('thumbnail');
}

Вопрос не в том как вывести thumbnail, если он есть у поста, а как добавить к посту thumbnail, если я его (пост) только создал функцией wp_insert_post.

Понял. Хороший вопрос 🙂

Я так понимаю что нужно в начале добавить картинку в медиафайлы, а потом приаттачить ее к посту как thumbnail.

Я правильно понимаю?

1) Для начала нужно загрузить медиафайл. (это вроде как сделал). За два дня нашел лишь функцию "media_sideload_image", адекватного описание к ней нет ни в кодексе, ни в интернете.

media_sideload_image($img_url,$new_post_id,$img_description);

2) Прикрепить медиафайл к посту как thumbnail, с помощью "set_post_thumbnail"?

Но как связать 1 и 2 пункты? После первого функция возвращает лишь ссылку на картинку, но не айди аттача.

Я уж не знаю на сколько правильно было делать именно так, но большие ничего не нашел.

1) открыл media_sideload_image и посмотрел что внутри. В конечном итоге ф-ция возвращает урл картинки, а нужно id атача.

2) переписал ф-цию под себя:

<?php 
function media_sideload_image_myedition($file, $post_id, $desc = null) {
      if ( ! empty($file) ) {
          // Download file to temp location
          $tmp = download_url( $file );
  
          // Set variables for storage
          // fix file filename for query strings
          preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $file, $matches);
          $file_array['name'] = basename($matches[0]);
          $file_array['tmp_name'] = $tmp;
  
          if ( is_wp_error( $tmp ) ) {
              @unlink($file_array['tmp_name']);
              $file_array['tmp_name'] = '';
          }
  
          // do the validation and storage stuff
          $id = media_handle_sideload( $file_array, $post_id, $desc );
          // If error storing permanently, unlink
          if ( is_wp_error($id) ) {
              @unlink($file_array['tmp_name']);
              return false;
          }         
          return $id;
      }
  }
?>

Итак, теперь имею:

$new_post_id = wp_insert_post( $my_post );    
 . . . 
$thid = media_sideload_image_myedition($img_url,$new_post_id, $img_description);            
if ($thid){ 
   set_post_thumbnail($new_post_id, $thid); 
}

Добавление иконок существует уже черт знает сколько, но решений в интернете еще нет. Странно.
В общем, пользуйтесь.

Anonymous
Отправить
Ответ на: