Поддержка Темы и шаблоны Первая картинка из записи вместо миниатюры

  • Использую тему Mobile Shop — Это дочерняя тема для StoreOne.
    Пытаюсь в качестве миниатюры назначить первую картинку из записи.
    В конец файла functions.php добавляю код:

    function first_post_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 = "/wp-content/themes/theme/images/noimages.jpg";
      }
      return $first_img;
    }

    В файле content-index.php (здесь указан весь код):

    <div id="post-<?php the_ID(); ?>" <?php post_class("col-md-4 col-sm-6 bgs-post home-post"); ?>>
    	<div class="post-inner">
    		<div class="img-thumbnail">
    			<?php if(has_post_thumbnail()): ?>
    			<?php the_post_thumbnail('storeone-thumb', array( 'class' => 'img-responsive' )); ?>
    			<?php else: ?>
    			<img src="<?php echo esc_url(get_template_directory_uri().'/images/featured-image-340x225.png'); ?>" class="img-responsive">
    			<?php endif; ?>
    			<div class="overlay">
    				<a class="bgs-blog-more" href="<?php the_permalink(); ?>" title="<?php esc_attr_e('Read More', 'storeone'); ?>"><i class="fa fa-angle-right"></i></a>
    			</div>
    		</div>
    		<div class="bgs-post-content">
    			<time class="bgs-date entry-date published" datetime="<?php echo esc_attr( get_the_date( 'c' )); ?>">
    				<div class="bds-date-block bds-day"><?php the_time( 'd',  get_the_ID()); ?></div>
    				<div class="bds-date-block bds-month"><?php the_time( 'M, Y',  get_the_ID()); ?></div>
    			</time>
    			<?php the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' ); ?>
    			<div class="entry-summary"><?php the_excerpt(); ?></div>
    			<div class="clearfix"></div>
    		</div>
    	</div>
    </div>

    Седьмую строку
    <img src="<?php echo esc_url(get_template_directory_uri().'/images/featured-image-340x225.png'); ?>" class="img-responsive">
    меняю на
    <img src="<?php echo first_post_image() ?>" alt="<?php the_title(); ?>" class="img-responsive">
    Код срабатывает, миниатюры стали видны, но посты, которые на одной странице отображаются по несколько десятков, налазят друг на друга. То есть сбивается красивое расположение постов. Понимаю, что проблема в стилях страницы, но разобраться не могу.
    Можете помочь?

    • Тема изменена 5 лет, 1 месяц назад пользователем SeVlad. Причина: ссылка

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 15 ответов — с 16 по 30 (всего 33)
  • Я добавляю посты удалённо, не заходя в админку WP

    А что, там, откуда добавляете нет поля для изображения записи?
    Чем Вы добавляете?

    не рассказано ГДЕ вывести

    Век живи — век учись! Каюсь — грешен я.

    в самих постах наверняка то, что и нужно

    Да, в постах всё отлично.

    Выводить как миниатюру надо везде: анонсы, рубрики, поиск, теги, главная…
    Свои художества я удалил и пробовал применять плагины без них — не получилось.
    К тому же хочется избежать дублирования (генерации) картинок, чтобы не засорять лишний раз сервер.

    К тому же хочется избежать дублирования (генерации) картинок, чтобы не засорять лишний раз сервер.

    Не засорите. Будут нужные размеры. Точнее они наверняка уже все есть. Плагины же пропишут их в базе.

    при добавлении новых постов необходимо будет всегда проходить этот процесс генерации изображения?

    Если используется плагин для генерации миниатюр из первой картинки поста — это будет происходить автоматически при создании новой записи. Для создания миниатюр к существующим записям можно попробовать трюк о котором я сказал выше.

    откуда добавляете нет поле для изображения записи

    Пользуюсь Зеброидом
    Во время экспортирования постов с помощью инструмента XML-RPC, он заливает на сервер и картинку, которая до этого лежит на компе и в посте естественно url к ней указан.
    Всё, что сейчас на сайте — залито именно Зеброидом.

    • Ответ изменён 5 лет, 1 месяц назад пользователем georgmann.
    Модератор Yuri

    (@yube)

    Либо я чего-то не понял (каюсь, не вникал глубоко), либо вполне сойдет старый добрый Auto Post Thumbnail. Один раз прогнать для старых записей, затем будет назначать миниатюрой записи первую картинку. Стоит на нескольких сайтах, и вроде как проблем не замечено.

    Пользуюсь Зеброидом

    Зачем собственно это надо? Может я чего не понимаю в конкретном случае, но по-моему это называется «дотянуться правой рукой до правого уха, но через ж@у….»

    Зачем собственно это надо

    Программа лежит под рукой — вот и пользуюсь (привык к ней).

    Пользуюсь Зеброидом

    По-моему он умеет назначать изображения записи.

    вот и пользуюсь (привык к ней).

    Не все привычки хороши. А некоторые в некоторых случаях и вредны. Так что не чудите.

    Зачем собственно это надо? Может я чего не понимаю в конкретном случае, но по-моему это называется «дотянуться правой рукой до правого уха, но через ж@у….»

    Если Вы не знаете что это за софт — Вам он не нужен 🙂
    А для инфы — это довольно мощный и полезный инструмент. (Мне вот жаль, что тексткит умер, с которого был когда-то содран Зеброид. Но автор Зеброида ещё больше расширил функционал и не бросает, а продолжает развитие)

    По-моему он умеет назначать изображения записи.

    Да, точно умеет. В конце этого мануала написано.

    По-моему он умеет назначать изображения записи.

    Точно, назначает! видеоинструкция

    Для будущих постов можно сказать вопрос решён.

    Да, точно умеет. В конце этого мануала написано.

    Спасибо за хорошую наводку!

    А вот что делать с уже опубликованными?

    Попробовал Auto Post Thumbnail, он конечно создает миниатюру, но и в посте появляется две одинаковые картинки.

    трюк о котором я сказал выше

    Здесь вы имели ввиду Auto Post Thumbnail?

    • Ответ изменён 5 лет, 1 месяц назад пользователем georgmann.

    но и в посте появляется две одинаковые картинки.

    Если тема выводит миниатюру изображение записи там, где Вам не нужно — можно удалить из шаблона, ответственного за вывод поста.
    Но тк Вы используете готовую дочку, но я бы рекомендовал её не трогать, а почистить контент от первой картинки. Это делается с пом плагинов поиска-замены с поддержкой регулярок.

    поиска-замены с поддержкой регулярок

    Название плагина не помните?

Просмотр 15 ответов — с 16 по 30 (всего 33)
  • Тема «Первая картинка из записи вместо миниатюры» закрыта для новых ответов.