Рубрики
Wordpress

WordPress: как сделать изображение в посте миниатюрой записи

Во время работы с одним старым сайтом на WordPress возникла необходимость автоматически установить для всех записей миниатюру. В качестве миниатюры нужно было использовать первую картинку из текста записи. Так как записей всего на сайте было более 3000, было решено это дело автоматизировать.

В результате получился следующий код. Его нужно поместить в functions.php вашей темы.

/*
  Устанавливаем первое изображение из поста миниатюрой записи
 */
/*
 * Раскомментируйте следующую строку, чтобы активировать плагин
 */
//add_action('parse_request', 'set_new_postthumbs');

function set_new_postthumbs() {
    // Получаем массив постов
    $posts = get_posts(
            array(
                'numberposts' => -1,
                'post_type' => 'post'
            )
    );

    // проверяем, что полученный массив не пустой
    if (empty($posts))
        return;

    // Перебираем все посты в цикле
    foreach ($posts as $p) {
        //Если у поста уже есть миниатюра, пропускаем
        if (has_post_thumbnail($p->ID))
        {
            continue;
        }
        // C помощью регулярного выражения достаём URL первого изображения в посте. site.ru замените на свой
        $haveimage=preg_match("#<img.+src=\".+site.ru(.+)(-\d+x\d+){0,1}(\..{3,4})\".+>#siU", $p->post_content, $matches);
        
        // Если не нашли изображение, пропускаем этот пост
        if (!$haveimage)
        {
            continue;
        }
        
        $image_url=ABSPATH.$matches[1].$matches[3];
        
        
          // Получаем mime type
          $filetype = wp_check_filetype( $image_url );

          // Массив аргументов для нового вложения
          $args = array(
          'post_mime_type' => $filetype['type'],
          'post_title'	 => esc_attr( $p->post_title ), // здесь используем заголовок поста, но вы можете использовать и другое значение
          'post_content'	 => '',
          'post_status'	 => 'inherit'
          );

          // Добавляем вложение
          $thumb_id = wp_insert_attachment( $args, $image_url,  $p->ID );

          // добавляем мета данные - высота, ширина и т.п.
          // нужные нам функции находятся в этом файле, который мы подключаем
          require_once(ABSPATH . 'wp-admin/includes/image.php');
          $metadata = wp_generate_attachment_metadata( $thumb_id, $image_url );
          wp_update_attachment_metadata( $thumb_id, $metadata );

          // Наконец устанавливаем миниатюру записи
          update_post_meta( $p->ID, '_thumbnail_id', $thumb_id );

         
    }
}

Код нужно выполнить один раз. Для этого необходимо раскомментировать соответствующую строку. Код выполнится при загрузке любой страницы сайта. Если записей на сайте много, процесс может занять продолжительное время.

После того, как  все миниатюры для записей проставлены, строку, активирующую плагин, нужно закомментировать (или удалить весь код плагина целиком).

 

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *