Получение первой картинки с поста в WordPress

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

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

Открываем файл functions.php и добавляем следующий код:

// Получение первой картинки с поста
function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];

// Если изображение отсутствует, то выводим изображение по умолчанию (указать путь к изображению)
  if(empty($first_img)){
    $first_img = "/images/default.jpg";
  }
  return $first_img;
}

Приведенная выше функция выводит первую картинку, которая находится в вашем посте, если картинки не существует, то показывается изображение по умолчанию, путь к которому необходимо указать, либо добавить в папку /images/ вашей темы изображение в формате .jpg и с именем default.

Не забываем сохранить файл functions.php и переходим к шаблону, в котором мы хотим выводить изображение, предположим index.php и вставляем функцию, отвечающую за показ картинки:

<?php echo catch_that_image() ?>

Функция должна находится в пределах основного цикла, выводящего запись в шаблоне, она покажет только ссылку на изображение, которую нужно поместить в тег <img>:

<img src="<?php echo catch_that_image() ?>"/>

Теперь пойдем немного дальше и создадим «умную» картинку анонс, для этого добавим атрибут alt с названием поста и сделаем картинку ссылкой на сам пост, проделанные операции добавят дополнительный вес нашему топику с точки зрения поисковой оптимизации:

<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
  <img src="<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>"/>
</a>

Все хорошо, но единственная загвоздка — картинки отображаются таким же размером как и в посте, что не очень впишется в любой дизайн. Есть несколько решений данной задачи, самое элементарное мы рассмотрим сразу, а второе, более продвинутое и очень удобное в следующей статье. Чтобы изменить изображения, мы можем воспользоваться масштабированием картинок с помощью стандартных атрибутов высоты и ширины:

<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
  <img src="<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>" width="550"/>
</a>

Мы задали изображению ширину в 550px (можно так же задать в %), высота будет уменьшена пропорционально теперь изображение может вписаться в дизайн сайта, с такой же структурой как и у меня, но есть и отрицательные стороны этого метода: изображение масштабируется браузером, и при загрузке анонсов пользователь загрузит исходное изображение. Второй способ заключается в автоматическом ресайзе изображений с помощью PHP-скрипта, о котором я напишу в следующей статье.

Комментарии (1):

  1. Александр

    11 декабря 2015 в 18:19  #

    Здравствуйте!
    Не подскажите, как вывести картинку в начале поста, которая установлена в качестве миниатюры, но в самой теме разработчиком не предусмотрен ее вывод в начале поста. Не судите строго, если сформулировал свой вопрос не достаточно правильно, я только учусь работать с вордпресс.

    В файл темы (loop-single.php) я вставляю код следующего вида ‘alignleft’)); ?> и картинка выводится перед началом текста, так как и нужно, но она не увеличивается в размере, не могу понять что именно нужно прописать в functions.php, что бы картинка установленная в качестве миниатюры выводилась и в посте перед началом текста в своем исходном размере размере.

    Использую тему zeeFlow, ссылка на тему http://business.themezee.com/themes/zeeflow/

    Заранее благодарен за ответы и помощь.