Проблема
В наши дни многие блогеры выводят выдержки из заметок вместе с изображениями на главную страницу. Можно пойти еще дальше и создать оригинальную галерею, в которой будут выводиться изображения для самых последних записей. Можно решить задачу с помощью пользовательских полей. Но есть и более элегантное решение.
Решение
Для создания собственного цикла изображений сначала нужна функция PHP, которая будет вытаскивать первые изображения из каждой заметки, и возвращать их URL. Скопируйте следующий код в ваш файл functions.php. Обязательно установите изображение по умолчанию в строке 10.
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;
}
После сохранения файла можно изменять главный цикл:
<?php
if (have_posts()) :
while (have_posts()) : the_post(); ?>
<a href="<?php the_permalink();?>" title="<?php the_title(); ?>" class="img-loop">
<img src="http://путь_к_папке_с_изображениями/<?php echo catch_that_image() ?>" alt="<?php the_title(); ?>" />
</a>
endwhile;
endif;
?>
Описание решения
Первая часть кода является функцией catch_that_image(), которая включается в файл functions.php. Данная функция разбирает код содержание записи с использованием глобальных переменных $post и $posts и регулярных выражений PHP. Если изображения не найдено (то есть, запись не имеет ни одного изображения), возвращается адрес изображения по-умолчанию. Иначе функция возвращает адрес первого изображения в заметке.
Вторая часть кода является главным циклом. В данном цикле не выводится текстовое содержание. Вместо него выводиться первое изображение заметки с помощью функции catch_that_image().