Здравствуйте, уважаемые читатели и посетители блога 4remind.ru. В этой заметке я хочу вам рассказать, как можно улучшить внешний вид ваших RSS, отправляемых с сайтов или блогов на базе WordPress. Ведь многие из тех, кто создал свой блог на движке WordPress, конечно заметили, как уныло и не привлекательно выглядят анонсы статей в новостных RSS-лентах изначально.
Но наверно многие заметили, что довольно часто в чужих RSS лентах в каждом анонсе встречается дополнительная информация, дополнительные ссылки, имеются изображения и даже рекламные блоки.
Все дело в том, что по умолчанию в WordPress 3.3.1 (да и в предыдущих версиях тоже) не предусмотрено включение в потоки RSS-лент изображений и какой-либо дополнительной информации, не входящей в содержимое самой статьи или ее анонса. Но все же улучшить вид RSS и добавить в них что-нибудь свое, дополнительное, включая изображения, можно самостоятельно. Конечно можно попробовать использовать готовые плагины, благо их превеликое множество, но я все же решил сделать все без них, так как стараюсь использовать как можно меньше плагинов, которые часто не рационально используют ресурсы сервера, что может снизить скорость работы сайта или блога. Поэтому на своих примерах я решил показать, как это сделать без использования плагинов, и что это не потребует очень больших усилий и знаний.
Все ниже следующие примеры кодов протестированы на WordPress 3.3.1 (самой последней стабильной версии на момент написания этой статьи), но скорее всего будут работать и на предыдущих версиях WP, ну и тем более все упомянутое работает на моем блоге.
Для достижения цели нам понадобится задействовать всего лишь один файл из темы или шаблона, использующегося на данный момент на сайте — это файл functions.php, который как правило находится в корневом каталоге темы. В него для начала добавим заготовку функции, которая будет служить фильтром-обработчиком содержимого RSS и функции, которые укажут WordPress, что эта функция будет обрабатывать конкретные данные:
function addOwnDataFeedFilter($content) { // здесь будет обрабатываться содержимое RSS return $content; } // добавляем нашу функцию addOwnDataFeedFilter($content) // как фильтр для обработки содержимого RSS add_filter('the_excerpt_rss', 'addOwnDataFeedFilter'); add_filter('the_content_rss', 'addOwnDataFeedFilter'); add_filter('the_content_feed', 'addOwnDataFeedFilter');
Итак, уже все готово к тому, что функция addOwnDataFeedFilter($content) будет обрабатывать контент RSS. Теперь пора добавлять и саму обработку содержимого RSS, чтобы внести в него все, что мы задумали, то есть изображение и какую-нибудь дополнительную информацию.
Изображение будет использоваться то, которое в анонсе статьи было добавлено как «Миниатюра» (thumbnail) при редактировании или создании статьи. Если же вы не используете изображения-миниатюры в своих статьях, то для использования моего кода все же понадобится в статьях подключить изображения-миниатюры, а чтобы они не отображались на страницах вашего сайта, если вам это конечно не нужно, то можно запретить их отображение, закомментировав в файлах вашей темы строчки кода подобные этим:
"alignleft post_thumbnail")); } ?>
Обычно эти строки находятся в файлах single.php, page.php, index.php, search.php, archive.php
Закомментировать например можно так:
"alignleft post_thumbnail")); } */ ?>
Итак, если к статьям уже добавлены миниатюры, то добавляем код, который обеспечит показ изображений, в функцию addOwnDataFeedFilter($content):
function addOwnDataFeedFilter($content) { global $post; if ( has_post_thumbnail( $post->ID ) ){ $content = '' . get_the_post_thumbnail( $post->ID, 'medium' ) . '
' . $content; } return $content; }
Теперь, сохранив измененный файл functions.php, если мы откроем свой RSS по ссылке http://вашсайт/feed, то увидим, что изображение уже появилось вместе с анонсом статьи. Что же, часть поставленной нами задачи выполнена.
Нам осталось в функцию addOwnDataFeedFilter($content) добавить код, дополняющий RSS кое-какой дополнительной информацией, по своему усмотрению конечно. На этом наш код можно будет считать завершенным и готовым к использованию.
В коде есть комментарии, которые поясняют назначение переменных:
function addOwnDataFeedFilter($content) { global $post; if ( has_post_thumbnail( $post->ID ) ){ $content = '' . get_the_post_thumbnail( $post->ID, 'medium' ) . '
' . $content; } // выводим в RSS дополнительную информацию, которая // будет выводиться под анонсом статьи $blogname = get_bloginfo('name'); // имя сайта $blogdescription = get_bloginfo('description'); // описание сайта $blogurl = get_home_url(); // ссылка на сайт $posturl = get_permalink(); // ссылка на полную статью на вашем сайте $posttitle = get_the_title_rss(); // заголовок статьи $postcat = get_the_category(); // $postcat[0]->cat_name — имя категории конкретной статьи $postcaturl = get_category_link( $postcat[0]->cat_ID ); // ссылка на категорию статьи // заменяем стандартные [...] на читабельное "Читать дальше..." $content = str_replace('[...]', ' Читать дальше...', $content); // добавляем в конец RSS анонса нужную нам информацию $content = $content . '
' . 'Copyright © 2012 ' . $blogname . ' | Все права защищены, копирование запрещено | ' . 'Постоянная ссылка' . 'Вы также можете ознакомиться с другими материалами рубрики '. '' . $postcat[0]->cat_name . ''; return $content; }
Замечу, что в состав информации, добавляемой в конец RSS анонса, вы можете добавлять то, что именно вам захочется, а я всего лишь привел пример того, что сам использую на своих блогах. Кстати, вышеописанным способом вы можете в свои фиды и рекламу добавлять.
Результат работы кода можно посмотреть на RSS моего блога
Удачной вам модернизации WordPress!
До встречи на страницах блога 4remind.ru
А в какое конкретно место в файле функшн вставлять первый код? Вставлять всё, кроме зелёного текста?
Вставлять лучше в самый конец файла functions.php, чтобы только после кода остался закрывающий PHP тэг «?>»
что-то не особенно видны картинки в вашем рсс-потоке. то есть не видны вовсе
Просто в последних трех постах не ставил картинок. Последний топик с картинкой в RSS был «SE Bots Log — плагин статистики посещений сайта роботами популярных поисковых систем». Картинка отображается в RSS http://feeds.feedburner.com/4remindru
Было бы интересно почитать в блоге о RSS вообще