Как вывести первую картинку из поста
У вас в блоге не каждая запись с картинкой в начале? Но вы хотите на главной странице вывести анонсы с картинками.
Выход есть! Мы можем прописать функцию, которая будет извлекать из вашей записи первую попавшуюся картинку. Затем ее можно вывести рядом с анонсом.
Зачем вообще это? Чуток позже вы узнаете, в следующих записях эта функция используется для более широких целей.
Итак, сразу привожу код функции. Вы должны поместить функцию в файл functions.php, который находится в папке с вашей темой wordpress. Вот сам код функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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]; // no image found display default image instead if(empty($first_img)){ $first_img = "/wp-content/uploads/2010/03/103.jpg"; } return $first_img; } |
Как вы видите в первой строке кода само название функции catch_that_image(), которая собственно и извлекает из поста первую картинку посредством регулярной записи. В 11-й строке указана картинка по умолчанию, это очень удобно, когда в записи нет фото (картинки), тогда можно вывести стандартную картинку на которой будет написано «Нет фото», например.
Сама функция вызывается вот так, это надо прописать в нужном месте в вашем wordpress шаблоне. А рядом можно прикрепить генерируемый анонс поста (как выводить анонс из записи в wordpress блоге).
1 | <img src="<?php echo catch_that_image(); ?>" alt="" /> |
Дальше можно отредактировать отображение картинки с помощью CSS стилей, добавив в код выше класс стиля.
1 | <img class="first-image" src="<?php echo catch_that_image(); ?>" alt="" /> |
Вот примерный CSS код стиля картинки:
1 2 3 4 5 6 7 | .first-image { display: block; //отображаем как блок width: 200px; //ширина 200 пикселей height: 150px; //высота 150 пикселей border: 1px solid #bbb; // рамка серого цвета шириной в 1 пиксель float: left; //выравнивание картинки с левого бока } |
Вот приблизительно так можно отобразить картинку, она отобразится слева от анонса благодаря свойству float.
Но в этом способе есть недостатки. Поэтому эта запись только начало, дальше мы научимся не только выводить первую картинку, но и обрезать ее до нужного размера, выводить похожие, популярные и самые комментируемые записи блога с картинками превьюшками.
Женские полезные советы для дома – интересные полезные советы о женской красоте, выборе домашней техники и уходу за домашними животными, воспитание детей.
Красивый женский журнал для милых леди, женские статьи про здоровье, беременность, моду, красоту, кулинарию и детей.
| This entry was posted by Арни Веб Дизайн on 22 Март 2010 at 22:53, and is filed under Wordpress. Follow any responses to this post through RSS 2.0. Вы можете оставить комментарий или трэкбэк с вашего сайта. |
1 год назад
вот бы еще аналогичных скриптик под joomla, было бы классно. также, для лучшего юзабилити, рекомендуется делать картинку в посте, особенно в превью, чтобы она была ссылкой на полную новость. спасибо за скрипт.
1 год назад
У меня этот скрипт (функция) на WP 2.3.3 выводит почему то не первую картинку из записи, а последнюю, не поможете?
1 год назад
Если бы ты еще писал что куда прописывать. Первый код понятно в functions.php, а вот другие коды куда пихать?
И так почти всюду, код пишешь а в каком файле его прописывать нету.
1 год назад
А что там непонятного? CSS – в CSS файл, функцию в файл functions.php в папке с темой, остальное в шаблон.
1 год назад
.first-image {
display: block;
width: 30%;
height: 25%;
border: 1px solid #bbb;
float: left;
}
Вот так я предложу оформить css. Просто фиксированная ширина и высота искажает изображение, а процентное соотношение – нет. Посмотрите на моем блоге. ilyaplot.ru
1 год назад
А как вывести такую превьюшку если используется на странице плагин NextGallery со флэшем…?!
1 год назад
Этого не знаю (
1 год назад
Эта ошибка ходит уже не один год и пришла из англоязычного инета.
Должно быть так:
[code]
$output = preg_match_all('//Uusi', $post->post_content, $matches);
$first_img = $matches [1] [0];
[/code]
[b]/Uusi[/b] вместо просто [b]/i[/b]
Почему?
U – не жадный режим совпадения, иначе может сьесть все картинки как одну;
u – unicode режим, мы ж вовсю пользуемся двухбайтовыми символами;
s – многострочный режим, из-за отсутствия этой s часто выводится не первая, а последняя картинка.
1 год назад
Парсер зохавал регулярку, но оставил модифиры, так что все понятно. )