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

  • Использую тему 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">
    Код срабатывает, миниатюры стали видны, но посты, которые на одной странице отображаются по несколько десятков, налазят друг на друга. То есть сбивается красивое расположение постов. Понимаю, что проблема в стилях страницы, но разобраться не могу.
    Можете помочь?

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

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

Просмотр 15 ответов — с 1 по 15 (всего 33)
  • Я так понимаю, тему вы обновлять не планируете?

    Не планирую. Или при обновлении буду постоянно вносить необходимые изменения.

    Вы просто отважный человек…..

    Модератор SeVlad

    (@sevlad)

    wp.me/3YHjQ

    Пытаюсь в качестве миниатюры назначить первую картинку из записи.

    Нет, это не «назначить», а «вывести» я так до конца и не понял что за…

    «Назначить» вообще не зависит от темы и для этого есть плагины. Ими пользуются не самые отважные, но те, кто не желает иметь проблем.

    Точно, Вывести. Спасибо за замечание.
    А что качается плагинов — перепробовал около десятка и пока что подходящего не нашёл.

    А что качается плагинов — перепробовал около десятка и пока что подходящего не нашёл.

    Смотря как и где искать…. Это к сожалению не все умеют правильно делать. В вашем случае это делается так:
    https://ru.wordpress.org/plugins/search/Featured+image/

    Не поверю, что для пустякового вопроса типа вашего, там нет подходящего.

    • Ответ изменён 4 мес., 2 нед. назад пользователем  O.
    • Ответ изменён 4 мес., 2 нед. назад пользователем  O.
    • Ответ изменён 4 мес., 2 нед. назад пользователем  O.
    Модератор SeVlad

    (@sevlad)

    wp.me/3YHjQ

    А что качается плагинов — перепробовал около десятка и пока что подходящего не нашёл.

    Зачем «пробовать», если достаточно описаний/скринов.
    Вот я за Вас полистал и нашел несколько. Вроде бы то, что нужно.
    https://wordpress.org/plugins/get-first-image-set-as-featured-image/
    https://wordpress.org/plugins/auto-set-first-image-as-featured/
    https://wordpress.org/plugins/easy-add-thumbnail/

    ЗЫ. про бекапы не забываем.

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

    <div style="text-align: center;"><img src="http://mysite.com/wp-content/uploads/2019/02/pictures.jpg" alt="" width="590" height=""></div>

    И необходимо вывести данную картинку вместо миниатюры. Пока что никак не получается.

    • Ответ изменён 4 мес., 2 нед. назад пользователем  georgmann.
    Модератор SeVlad

    (@sevlad)

    wp.me/3YHjQ

    редложенные вами плагины и многие другие не решают мой вопрос. Наверное стоит уточнить, что посты уже опубликованы (и их много).

    Плагины решают Ваш изначальный вопрос — «назначить».

    А «вывести» — это уже другой вопрос и за него отвечает тема.

    И необходимо вывести данную картинку вместо миниатюры. Пока что никак не получается.

    Стало ещё менее понятно. Если «вместо», то что зачем назначать и что не так-то вообще? Почему это не выводится, если но есть в коде?

    Может Вы уж в конце-концов сайт покажите (страницу с проблемой), тему назовёте (если она из оф каталога)?

    предложенные вами плагины и многие другие не решают мой вопрос

    Но если немного подумать — могут решить. Как вариант устанавливаем плагин, который автоматически генерирует изображение записи (миниатюру) из первой картинки поста. Затем обновляем все посты с помощью массового редактирования. (не все сразу если их очень много, а партиями)
    http://joxi.ru/vAWzvB5t1JaYD2
    Должно сработать.

    • Ответ изменён 4 мес., 2 нед. назад пользователем  O.
    • Ответ изменён 4 мес., 2 нед. назад пользователем  O.

    И необходимо вывести данную картинку вместо миниатюры

    Наверное не ВМЕСТО. а КАК миниатюру?
    Sevlad —

    Mobile Shop — Это дочерняя тема для StoreOne.

    — из оф. каталога

    Я извиняюсь за некорректные с профессиональной точки зрения высказывания.
    Да, действительно суть вопроса должно звучать так: Вывести как Миниатюру
    Ссылка на сайт [по просьбе ТС удалена из поста. Перенесена в старпост. SeVlad]
    Название темы указал в самом начале
    Использую тему Mobile Shop

    • Ответ изменён 4 мес., 2 нед. назад пользователем  SeVlad. Причина: ссылка в старпосте

    Но если немного подумать — могут решить. Как вариант устанавливаем плагин, который автоматически генерирует изображение записи (миниатюру) из первой картинки поста. Затем обновляем все посты с помощью массового редактирования. (не все сразу если их очень много, а партиями)
    http://joxi.ru/vAWzvB5t1JaYD2
    Должно сработать.

    Модератор SeVlad

    (@sevlad)

    wp.me/3YHjQ

    Да, действительно суть вопроса должно звучать так: Вывести как Миниатюру

    И не так 🙂 Потому что не рассказано ГДЕ вывести.

    Как я понимаю нужно вывести в анонсах (напр на странице рубрики category/after-effects-presets). Т.к в самих постах наверняка то, что и нужно.
    Если так, то выше всё верно говорилось и плагины с этим должны помочь. Только удалите из темы и файл content-index.php и своё «художество» из файла функций.

    из оф. каталога

    Да, спс.. запамятовал в потоке вопросов 😉

    автоматически генерирует изображение

    Я правильно понимаю, что в этом случае в библиотеку медиафайлов будет добавляться количество картинок, соответствующих количеству постов?
    И ещё… а при добавлении новых постов необходимо будет всегда проходить этот процесс генерации изображения?
    P.S. Я добавляю посты удалённо, не заходя в админку WP. Поэтому постоянно заходить в админку сайта и ещё что-то доделывать не хотелось бы.

Просмотр 15 ответов — с 1 по 15 (всего 33)