Для того, чтобы выводить изображения из постов в анонсах (например, на главной странице), можно использовать встроенную функцию, создающую миниатюры. Это хороший, универсальный способ, который подходит к использованию в 95% блогов. Но всегда есть 5%, в которых он не очень удобен. Объясню, почему. Взять, например, блог, в котором картинки используются не в каждом посте. Тогда миниатюру в каждую запись придется добавлять вручную – уже лишняя трата времени. Или же взять, к примеру, блог, в котором используются очень большие картинки в постах, а в анонсах на главной странице отображаются маленькие миниатюры. Если создать маленькую миниатюру большой картинки, то теряется детализация, и иногда становится совершенно непонятно, что изображено на миниатюре. В таких блогах лучше использовать специальную функцию, которая выводит не созданную миниатюру, а первое изображение.
Для вывода первого изображения записи создадим специальную функцию, автоматически находящую изображение и выводящую код ссылки на него. Стоп – можете возразить вы – ну а если в посте нет изображения? Это резонное замечание, и специально для такого случая функция будет выводить заранее приготовленную нейтральную картинку-заглушку. Если таких постов будет много, то в них будет выводится одна и та же картинка-заглушка, что не очень красиво. Поэтому сделаем так, чтобы выводились каждый раз разные картинки-заглушки.
Создайте в корневой папке вашего блога папку images, и положите туда любое количество картинок. Чтобы картинки выглядели красиво, не забудьте, что они должны быть пропорциональными и одинакового размера (например 300 на 200). Переименуйте все картинки по порядку, например так: default-thumb-01.png, default-thumb-02.png, default-thumb-03.png, default-thumb-04.png, и так далее.
Откройте файл 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)){ $images = array( 'default-thumb-01.png', 'default-thumb-02.png', 'default-thumb-03.png', 'default-thumb-04.png', 'default-thumb-05.png', 'default-thumb-06.png', 'default-thumb-07.png', 'default-thumb-08.png', 'default-thumb-09.png', 'default-thumb-10.png', 'default-thumb-11.png', 'default-thumb-12.png', 'default-thumb-13.png', 'default-thumb-14.png', 'default-thumb-15.png', 'default-thumb-16.png', 'default-thumb-17.png', 'default-thumb-18.png', 'default-thumb-19.png', 'default-thumb-20.png', 'default-thumb-21.png', 'default-thumb-22.png', 'default-thumb-23.png', 'default-thumb-24.png', 'default-thumb-25.png', 'default-thumb-26.png', 'default-thumb-27.png', 'default-thumb-28.png', 'default-thumb-29.png', 'default-thumb-30.png', 'default-thumb-31.png', 'default-thumb-32.png', 'default-thumb-33.png', 'default-thumb-34.png', 'default-thumb-35.png', 'default-thumb-36.png', 'default-thumb-37.png', 'default-thumb-38.png', 'default-thumb-39.png', 'default-thumb-40.png', 'default-thumb-41.png', 'default-thumb-42.png', 'default-thumb-43.png', 'default-thumb-44.png', 'default-thumb-45.png', 'default-thumb-46.png', 'default-thumb-47.png', 'default-thumb-48.png', 'default-thumb-49.png', 'default-thumb-50.png', 'default-thumb-51.png', 'default-thumb-52.png', 'default-thumb-53.png', 'default-thumb-54.png', 'default-thumb-55.png', 'default-thumb-56.png', 'default-thumb-57.png', 'default-thumb-58.png', 'default-thumb-59.png', 'default-thumb-60.png', 'default-thumb-61.png', 'default-thumb-62.png', 'default-thumb-63.png', 'default-thumb-64.png', 'default-thumb-65.png', 'default-thumb-66.png', ); $image = $images[array_rand($images)]; $first_img = "/images/" . $image . ""; } return $first_img; }
В том месте шаблона, где вы хотите вывести изображение из поста, используйте код:
"/>
Функция выведет картинку из поста без изменений. Эта картинка будет являтся одновременно и ссылкой на пост. Если же в посте нет картинок, то функция выведет одну из картинок-заглушек. Чем больше таких картинок-заглушек вы приготовите, тем меньше вероятность, что встретятся две одинаковые подряд. Резонно, что на ширину или высоту выводимой картинки дизайном блога накладываются ограничения, поэтому изменить картинку в размерах можно заранее, указав максимальную высоту или масимальную ширину:
Пример кода, выводящего картинку, пропорционально уменьшая ее до ширины в 300 точек:
"/>
При перезагрузке страницы в анонсах постов с изображениями будут выводится первая картинка из поста, а в анонсах постов без изображений каждый раз будет отображаться новая картинка-заглушка.