Поддержка Проблемы и решения Миниатюры для случайных записей из статьи

  • Здравствуйте!
    Есть код который выводит произвольные записи с миниатюрами. Миниатюры подтягиваются из самой статьи. И бывает так, что в статьях размещаются картинки больших размеров и соответственно имеют значительный вес. В итоге эти картинки выводятся в миниатюры и начинают жестко грузить сайт.

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

    У меня миниатюры заданы 300*300.

    Код, который я использую:
    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];
                                                    // no image found display default image instead
    if(empty($first_img)){
    $first_img = "NOIMAGE.png";
    }
    return $first_img;
    }
     ?>

    вывожу в sidebar.php

    <?php $posts = get_posts('orderby=rand&numberposts=10');
    foreach($posts as $post) { ?>
    <li><a href="<?php the_permalink(); ?>
    " title="<?php the_title(); ?>"><img title="<?php the_title(); ?>" src="<?php echo catch_that_image( ); ?>" alt="<?php the_title(); ?>" width="150" /><span class="title"><?php the_title(); ?></span></a>
    </li>
    <?php } ?>
Просмотр 13 ответов — с 1 по 13 (всего 13)
  • как можно подтянуть для миниатюр не сами картинки из статьи, а миниатюру этих картинки.

    Правильнее не лечить последствия, а устранять причину. То бишь загружать нормальные изображения. В крайнем случае — обрабатывать при загрузке. Даже какие-то плагины для этого имеются.

    Все неплохо выводит и работает без плагинов. Просто хотелось бы уменьшить нагрузку. Решил поспрашивать у более знающих как решить этот вопрос. Готов оплатить решение за адекватную стоимость.

    если учесть, что имена картинок известны заранее, то что сложного в добавлении к имени картинки «-300×300»?

    Объясните более понятно на счет имен картинок.

    вы папку uploads посмотрите.
    если для миниатюр заданы размеры 300 на 300, то при загрузке файла test.jpg будет создана картинка test-300×300.jpg

    у вас есть имя оригинальной картинки $first_img = $matches [1] [0]; — вот это $first_img разбираем регекспом и добавляем к названию «-300×300».

    да даже разбирать не надо — тупо меняем точку «.» на «-300×300.» обычной заменой.

    PS это так, навскидку.

    Все неплохо выводит и работает без плагинов. Просто хотелось бы уменьшить нагрузку

    Нормально, но нагрузка 🙂 Ну чё, нормально. да 🙂

    В uploads есть именно подобные картинки test-300×300.jpg
    Сделал так.

    <?php
    function catch_that_image() {
    global $post, $posts;
    $first_img = '';
    ob_start();
    ob_end_clean();
    $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"]-300x300.*>/i', $post->post_content, $matches);
    $first_img = $matches [1] [0];
                                                    // no image found display default image instead
    if(empty($first_img)){
    $first_img = "NOIMAGE.png";
    }
    return $first_img;
    }
     ?>

    Он выводит заглушку всем случайным постам.
    Где я допустил ошибку?

    потому что не там код вставили, зачем вообще разбор поломали?

    <?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];
    $first_img = str_replace('.', '-300x300.', $first_img);
                                                    // no image found display default image instead
    if(empty($first_img)){
    $first_img = "NOIMAGE.png";
    }
    return $first_img;
    }
     ?>

    должно сработать.
    если, конечно, в именах картинок нет лишних точек и если все картинки сайта загружались при уже установленном правильном размере миниатюр. если нет, то надо плагином Regenerate Thumbnails пройтись будет.

    но вообще — это костыль для ленивых, которым лень миниатюру при создании записи поставить. криво это.

    Он еще к домену приписывает почему то -300×300

    а там полный урл в $first_img значит.
    ну простой заменой значит не выйдет.

    пробуйте регексом, чтобы последнюю точку менял.
    или так (только для jpg):

    $first_img = str_replace('.jpg', '-300x300.jpg', $first_img);

    но это только для теста — совсем уж криво.

    Подскажите, как регексом сделать правильно замену последней точки?

    Flector, Спасибо Вам за помощь. Буду копать дальше по этой теме!

    Сделал так в итоге. Перечислил форматы картинок.

    $first_img = str_replace(‘.jpg’, «-150×150.jpg», $first_img);
    $first_img = str_replace(‘.png’, «-150×150.png», $first_img);

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Тема «Миниатюры для случайных записей из статьи» закрыта для новых ответов.