Дизайн та розробка сайту

Первая картинка из записи вместо миниатюры WordPress без плагина

Превая картинка из записи

Доброго времени суток 🙂
Тема этой статьи - первая картинка из записи вместо миниатюры WordPress без плагина. Часто авторы не добавляют миниатюры к своим записям или этой функции просто нет в теме, а через какое-то время вы решаете обзавестись таким удобством. Но вот беда, записи, которые вы добавили ранее не имеют миниатюр и если вы изменили тему или доработали ее и оформили красивый вывод картинок и текста в цикле, то старые записи будут смотреться не совсем красиво.
В этом случаи нам поможет данный способ. Его суть заключается в том что с помощью функции, мы вытягиваем первое изображение из записи и устанавливаем его в виде миниатюры. Как и раньше миниатюры добавлять не нужно, просто и далее продолжайте добавлять изображения в свою запись.
И так приступим к выполнению поставленной задачи.

1. Функция установки первой картинки в качестве миниатюры

Первое что вы должны сделать, это открыть Ваш файл functions.php и добавить в него, нижеприведенную функцию.

Превая картинка из записи
//Вывод первой картинки с поста
function first_post_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 = "/wp-content/themes/НАЗВАНИЕТЕМЫ/images/noimages.jpg";
// укажите путь к изображению, которое будет выводится по умолчанию. 
  }
  return $first_img;
}

Скрипт вытягивает первое изображение из записи, но если его нет, то он ставит картинку по умолчанию. Чтобы вывести изображение по умолчанию вы должны создать его, назвав noimages.jpg и поместить в папку images. В 11 строке укажите путь к изображению.

1. Подключаем функцию вывода первой картинки в теме

Миниатюра подключается во всех файлах где в цикле выводятся записи - это index.php, content.php, archive.php, category.php, single.php и тд,
Для подключения нужно вставить следующий код после определения цикла, который выглядит примерно так:

<?php if(have_posts()) : ?> <?php while(have_posts()) : the_post(); ?> 

Сам код вывода нашей функции:

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

так картинка будет кликабельна и по ссылке вы перейдете в саму запись.

А вот в записи нужно вывести некликабельную картинку. Для этого нужно в single.php добавить код без ссылки

<img src="<?php echo first_post_image() ?>" alt="<?php the_title(); ?>" />

Теперь в Вашей теме не будет записей без миниатюр.

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

Еще небольшое дополнение к статье.

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

<?php if ( has_post_thumbnail() ) { the_post_thumbnail('thumbnail'); }
else { ?>
<img src="<?php echo first_post_image() ?>" alt="<?php the_title(); ?>" />
<?php } ?>

Конечно же добавляете свои классы стилей и оформителе их в CSS. Тогда ваши миниатюры будут выглядеть так, как Вам нужно.

На этом все, спасибо за внимание 🙂

Дизайн та розробка сайту

Back to top