» » » Картинки в RSS ленте и ссылка «Читать далее»
logotip

Картинки в RSS ленте и ссылка «Читать далее»

Всем привет! Сегодня на seo-mayak.com выходит продолжение серии статей, посвященных сервису feedburner, в которой я расскажу, как добавить картинки в RSS-ленту.

Также объясню, как настроить вывод анонсов в RSS ленте и как добавить в анонс ссылку «Читать далее» или «Читать полностью». В общем можно будет вставить ссылку с любым анкором, кому какой нравиться.

Наверное вы уже взглянули на мою RSS-ленту, если нет, то кликните по иконке в правом верхнем углу шапки блога. Согласитесь, с картинками лента выглядит гораздо веселей.

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

Этим мы сделаем нашу новостную ленту гораздо привлекательней и тем самым подогреем желание пользователя подписаться на наш RSS-канал, ведь как говориться, встречают по обложке…

kartinki v rss

Многие веб-мастера решают данную задачу с помощью плагинов : Insert RSS Thumbnails или WP RSS Images, но как я уже много раз говорил — зачем нагружать свой сайт плагинами, если есть возможность обойтись без них. Поехали!

Технология добавления данных в  RSS-ленту

Что происходит во время публикации новой статьи? Как она попадает в RSS-ленту? Какие шестеренки в этот момент задействованы?

В первую очередь, происходит обращение к функции the_content, которая отвечает за форматирования всего контента.

Затем активируется одна из функций: the_content_feed или the_excerpt_rss, в зависимости от настроек WordPress.

the_content_feed — форматирует и передает в RSS-обработчик пост целиком.

the_excerpt_rss — форматирует и передает в RSS-обработчик анонс поста.

Чтобы выбрать одну из вышеперечисленных функций, надо пройти админка -> Параметры -> Чтение  и отметить галочкой соответствующий пункт:

kartinki v rss1

Советую выбрать пункт «Анонс». Если в RSS-ленте или в письме подписчику будет отображаться статья целиком, то пользователю будет незачем переходить к Вам на сайт и Вы потеряете посетителя.

Поэтому, выбираем «Анонс» и тем самым активируем функцию the_excerpt_rss.

Теперь, когда нам известна функция, отвечающая за форматирования нашего RSS-потока, мы может на нее воздействовать с помощью фильтра. Т.е. мы создадим новое «действие» и заставим функцию the_excerpt_rss его выполнять.

Придумываем название фильтру, в моем случаи фильтр будет называться mayak_image_rss и пишем такой сценарий:

function mayak_image_rss($content) { 
/* Здесь будет основное действие */
return $content; 
}

Через переменную $content мы получили контент и с помощью выражения (команды) return, вернули на место, так ничего ним и не сделав.

Теперь давайте рассмотрим само действие:

global $post; 
if ( has_post_thumbnail( $post->ID ) ) { 
$content = '' . get_the_post_thumbnail( $post->ID, 'thumbnail', array( 'style' => 'float:left; margin:0 10px 10px 0;' ) ) . '' . $content; 
}

Выражение global задает область действия функции. В нашем случаи, область действия должна распространятся на все посты, поэтому к выражению global, присваиваем переменную $post.

Через переменную $post мы получили все записи, которые есть в базе данных. Теперь нам надо их обработать и внедрить миниатюры.

С помощью функции has_post_thumbnail мы проверяем каждую запись на наличие миниатюры.

Если миниатюра для записи имеется, то вызываем функцию get_the_post_thumbnail, которая отвечает за форматирования изображений. Присваиваем функции параметры, которые будут влиять на размер миниатюр и на их положение на странице, относительно текста.

$content = '' . get_the_post_thumbnail( $post->ID, 'thumbnail', array( 'style' => 'float:left; margin:0 10px 10px 0;' ) ) . '' . $content;

По умолчанию в WordPress миниатюры генерируются трех размеров.

thumbnail — Миниатюра (размер по-умолчанию 150px x 150px)
medium — Средний размер (по-умолчанию 300px x 300px)
large — Большой размер (по-умолчанию 640px x 640px)

Изменить размеры можно, пройдя: админка -> Параметры -> Медиафайлы:

kartinki v rss2

Допустим, я хочу, чтобы в RSS-ленте отображались миниатюры среднего размера. Для этого мне надо поменять в коде одно слово.

Вместо:

'thumbnail'

Вставить:

'medium'

В итоге команда должна выглядеть так:

$content = '' . get_the_post_thumbnail( $post->ID, 'medium', array('style' => 'float:left; margin:0 10px 10px 0;'  ) ) . '' . $content;

Также в коде заданны стили для миниатюры:

array('style' => 'float:left; margin:0 10px 10px 0;'  )

Где:

float:left; /* обтекание текста по левому краю */
margin:0 10px 10px 0;  /* внешние отступы */

Итак, у нас есть готовое действие, по-добавлению картинок, заданного размера, в тело поста. Теперь осталось заставить функцию the_excerpt_rss выполнять написанный нами сценарий.

Для этого мы применим фильтр, через который пропустим работу функции the_excerpt_rss:

add_filter('the_excerpt_rss', 'mayak_image_rss');

На заметку! add_filter — это своего рода хук (хук с англ. — крючок, цеплялка), с помощью которого происходит привязка какого либо сценария, к конкретной функции.

Т.е, мы включили наш сценарий, который я назвал mayak_image_rss, в работу функции the_excerpt_rss и заставили его выполнять. Идем дальше.

Добавляем картинки в RSS-ленту

Сразу хочу сказать. Если на вашем блоге еще не включена поддержка миниатюр, то ее надо обязательно включить, иначе ничего работать не будет. Как включать миниатюры в WordPress, читайте здесь.

С помощью текстового редактора Notepad++ открываем для редактирования файл functions.php, что находиться в папке с темой и в самый конец перед знаком ?>, в некоторых темах ob_end_clean(), вставляем, подготовленную нами, функцию:

function mayak_image_rss($content) { 
global $post; 
if ( has_post_thumbnail( $post->ID ) ) { 
$content = '' . get_the_post_thumbnail( $post->ID, 'thumbnail', array( 'style' => 'float:left; margin:0 10px 10px 0;' ) ) . '' . $content; 
}
return $content; 
} 
add_filter('the_excerpt_rss', 'mayak_image_rss');

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

И что теперь целые сутки ждать? Вовсе необязательно!

В недавней статье, посвященной feedburner, я разбирал настройки вкладки «Публикуй», где описывал работу функции «BuzzBoost», с помощью которой можно мгновенно обновить контент в фиде.

Все готово! Картинки должны появится в RSS ленте.

Но статья на этом не заканчивается. Я еще обещал рассказать как убрать знак […] с конца анонсов и как добавить ссылку на пост, с анкором «Читать далее».

Ссылка «Читать далее» в RSS ленте

Как я уже писал выше, за вывод анонса, в RSS-ленте, отвечает функция the_excerpt_rss.

Данная функция работает на основе другой функции — the_excerpt, которая, в свою очередь, отвечает за вывод анонсов непосредственно на блоге.

Я сейчас не стану описывать всю сложную цепочку взаимодействия функций, при формировании анонса. Об этом вы можете почитать, пройдя по приведенной выше, ссылке.

Для замены знака […] на ссылку «Читать далее», мы будем воздействовать на функцию the_excerpt с помощью уже известного метода, а именно, добавим в функцию новый сценарий:

Для этого открываем файл functions.php и вставляем следующий код:

function mayak_segment_more($more) {
       global $post;
	return '<div style="text-align:right;"><a href="'. get_permalink($post->ID) . '"> <br/>Читать полностью »</a></div>';
}
add_filter('excerpt_more', 'mayak_segment_more');

После обновления фида, ссылка должна появиться под анонсами в RSS-ленте:

kartinki v rss3

Надо отметить один момент:

Важно! Если на вашем сайте, для вывода анонсов, используется функция the_excerpt и Вы уже производили действия, по замене знака […] на ссылку «Читать далее», то повторно этого делать уже не надо!

Итак, пора подвести некоторые итоги.

С помощью функции (фильтра) add_filter(), можно добавлять различные сценарии, практически в любую функцию WordPress, например задать шорткод или настроить защиту от спама в комментариях.

А сегодня мы выяснили, что с помощью add_filter() можно добавить картинки в RSS-ленту и вставить ссылку «Читать далее».

Но стоит знать, что возможностями данной функции могут воспользоваться и злоумышленники. Обязательно защищайте сайт от вирусов и взлома, чтобы потом вдруг не обнаружить на нем открытые внешние ссылки, замаскированные в точку.

Конечно, в будущем я еще не раз вернусь к возможностям функции add_filter() и не только, так что не примените подписаться на обновления блога и Вы непременно узнаете для себя много нового и интересного!

До встречи!

С уважением, Виталий Кириллов

« Feedburner. Зачем нужна подписка на сайте
« Регистрация в feedburner. Настройка функций во вкладке «Оптимизируй»
« Настройка RSS-ленты. Функции вкладки «Публикуй»

Комментарии: 21

  1. Елена Картавцева:

    Увы,Виталий, то, что связано с кодами и html слишком сложно для меня!

    Ответить
  2. ярослав:

    подскажите, когда вставил код «читать далее», ссылка читать далее появилася не в rss а в блоге. может не туда вставил?

    Ответить
    • Виталий Кириллов:

      Ярослав RSS-ленте надо обновится, а на блоге ссылка «Читать далее» появилась потому, что на вашем блоге для вывода анонсов, используется функция the_excerpt(). Читайте про вывод анонсов здесь.

      Ответить
      • ярослав:

        Спасибо, разобрался.

        Ответить
      • Виктория:

        На блоге ссылка «Читать далее» уж год стоит, а в rss ленте, как не было, так и нет… Где искать проблему?

        Ответить
  3. NeXan:

    Я использую в новостях цитаты вместо анонсов.
    Не подскажете, как в RSS вывести анонс вместо цитаты, а то ссылка «Читать полностью» не высвечивается?

    Ответить
    • Виталий Кириллов:

      Если Вы используете цитаты, то функция the_excerpt() игнорирует анонсы и вывести их в RSS не получится.

      Ответить
  4. Лев:

    Добрый день! НЕ подскажите ли как в письмо вставить переменную, отвечающую за вывод название статьи блога? Например я выложил пост, зарегистрированным пользователям ушло уведомление об этом с названием статьи. Вот не могу название статьи вставить, все что-то не то получается. Спасибо!!!

    Ответить
    • Виталий Кириллов:

      Здравствуйте Лев! Я немного не понял, пользователем приходит письмо просто с текстом и без заголовка?

      Ответить
  5. Петя:

    Здравствуйте! А как вы сделали, что ваша фотография отображается в RSS?
    У меня нет таких символов […], как вывести ссылку «читать далее», у меня ее нет? Жду ответа, спасибо за статью.

    Ответить
    • Виталий Кириллов:

      Здравствуйте!
      1. Как добавить свое фото в фид или любое другое изображение, читаете здесь.
      2. Для того, чтобы вывести ссылку «читать далее», просто вставьте функцию, которую я привел в статье.

      Ответить
  6. Денис:

    Читать полностью появилось, но она не активная, как текст, что не так ?

    Ответить
    • Виталий Кириллов:

      Где-то ошибка.

      Ответить
      • Денис:

        Главное в стандартном фиде сайта нормально, а в в видбинере гугла просто текст

        Ответить
  7. Мирослав:

    Виталий, спасибо огромное за серию статей, все по полочкам.

    Ответить
    • Виталий Кириллов:

      Пожалуйста Мирослов!

      Ответить
  8. Женя:

    Виталий! Большое и искреннее спасибо вам за подробную инструкцию по feedburner. Когда билась с настройками, выбрала ваш сайт более чем из пяти, за то, что все разложено по полочкам.

    Ответить
    • Виталий Кириллов:

      Пожалуйста! Рад видеть Вас, Женя!

      Ответить
  9. Игорь:

    Спасибо. RSS частенько сбивался. Рекомендации Ваши помогли.

    Ответить
  10. Роман:

    Поставил плагин WP RSS Images Setting что бы не заморачиваться а в ленте так и не появились картинки, не подскажете почему ?

    Ответить
  11. Роман:

    Теперь пробую этот плагин Insert RSS Thumbnails и дальше в ленте не появляются картинки ?

    Ответить

Оставить комментарий

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS