Совмещение миниатюр и скрипта первой картинки поста

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

1)   Миниатюры для постов – его хорошо использовать, если Вы начинаете новый проект;

2)   Определенный скрипт для того, чтобы автоматически получать первую картинку поста. Этот метод хорошо применять, если на Вашем блоге скопилось множество статей, и Вы решили украсить главную страницу и страницы  архивов.

Если вы ищите сервис рассылки sms и не знаете, какую фирму лучше выбрать для качественного исполнения заказа, рекомендуем обратиться в сервис рассылки SMS AlphaSMS. Опытные специалисты грамотно и качественно исполнят все ваши пожелания, а вы получите максимальный результат от выполненной работы.

Предлагаю совместить эти два варианта.

С этой ситуацией мне пришлось столкнуться, когда я решил усовершенствовать один блог, которому уже было несколько лет. На нем скопилось более 500 постов, и просматривать их, делать красивую миниатюру для каждого, либо приписывать в тексте ссылку more – очень трудоемкий и неэффективный процесс. Поэтому я применил скрипт для получения первого изображения поста. Для этого необходимо  в файл functions.php добавить следующее:

[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)){ //Defines a default image
$first_img = «/files/no-image.gif.jpg»;
}
return $first_img;
}

[/php]

Следующее что надо сделать, это в файл отображения категорий находящихся в архиве archive.php или index.php добавить что-то вроде:

[php]

<div>
<div style=»border:1px solid #4a4a4a; height: 112px; padding: 2px;»>
<div style=»border: 1px solid #333; width: 230px;height: 165px;background: url(<?php if(catch_that_image() != ») { echo catch_that_image(); } else { ?>http://www.web2me.ru/files/no-image.gif<?php } ?>) 0 0 no-repeat;»> </div>
</div>
</div>

[/php]

Для post-image можно дописать обтекание по краю float: left. После того, как мы внесли все эти правки, страница категорий приобрела следующий вид:

postkart2 (1)

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

Предлагаю решить задачу следующим образом: добавить для тех постов, где картинка отображается криво поддержку миниатюр. Для этого нужно сделать:

1. Зайдем в файл functions.php и разместим код  активации миниатюр в любом месте (в том случае если он там отсутствует):

[php]

if ( function_exists( ‘add_theme_support’ ) ) add_theme_support( ‘post-thumbnails’ );

[/php]

2. Открываем index.php или archive.php, находим место, где находился код предыдущего скрипта, который был описан выше, и преобразовываем его в такой вид:

[php]

<div>
<?php if ( function_exists(«has_post_thumbnail») && has_post_thumbnail() ) {
the_post_thumbnail(array(230,1500), array(‘class’ => ‘post_thumbnail’)); }
else { ?>
<div style=»border: 1px solid #333; width: 230px;height: 165px;background: url(<?php if(catch_that_image() != ») { echo catch_that_image(); } else { ?>http://www.web2me.ru/files/no-image.gif<?php } ?>) 0 0 no-repeat;»></div>
<?php } ?>
</div>

[/php]

Таким образом, используя этот хак, мы добавили условие – если пост содержит миниатюру, она будет показана, если нет – система покажет первую попавшуюся картинку в статье. В случае если это не сработает, тогда выведется «пустое» изображение (мой располагается здесь http://www.web2me.ru/files/no-image.gif, для своего проекта пропишите иной путь).

Выполнив все эти манипуляции, остается лишь в фотошопе нарисовать картинку, которая бы подошла к статье и для шаблона по своим размерам. Затем откройте для редактирования нужный пост, загрузите в текстовом редакторе рисунок и укажите «Использовать в качестве миниатюры». В конечном итоге имеем вот такую страницу категорий:

postkart2

Может, конечно, не идеал, но смотрится гораздо лучше, чем в первом варианте. В этом случаи  наша миниатюра «не испортит» статью, в том числе при полном ее отображении – картинки будут выводиться как прежде. Превью будут выводиться только на страницах тегов, архивов категорий и главной странице. Короче говоря, в какие файлы шаблона Вы вставите, там и отобразится.