После того, как фид создан, есть много способов настроить его внешний вид и функционал. Если вы используете фидбернер, то достаточно просто войти в аккаунт и сделать нужные правки. А если нет?
Ничего страшного, своими силами мы можем сделать еще лучше, еще больше, еще круче.
Форматируем изображения фидов
Изображение, вызываемые тегом <img src"..." alt="..." /> по сути являются строчным элементом. Изображение имеет высоту и ширину, но оно не разрывает строку и идет сразу после текста, а не с новой строки. А после изображения текст продолжает идти дальше в ряд, а не обтекает его. Поэтому не зависимо от стиля на сайте, в рсс читалке запись будет выглядеть не так, как на сайте.
Разница между сайтом и ридером
CSS стиль вашего сайта может что угодно делать с изображениями: задавать отступы, обтекания, положения на странице. Но css файл ничего не значит и никак не влияет на содержимое rss-лент и на отображение записей в читалках. Поэтому изображения становятся строчными элементами, а ссылки – синими по умолчанию. Один из способов оторвать изображение от текста – добавить новые переносы строк до и после изображения в процессе созданияредактирования записи.
Вот пример того, о чем идет речь:
Пустые строки до и после <img> обеспечат, что параграф будет отделен от изображения и будет автоматически вставлен тег <br />. Если же вставить по две пустые строки, то изображение будет автоматически обернуто в теги <p></p>. А теги параграфа — блочные элементы, что означает, что в рсс-ленте изображение будет оторвано от текста. А последующий текст будет не дописан сбоку, а выведен под изображением с новой строки.
Другой способ — это явно указать стили изображения внутри тега img, например, так
<img src="..." alt="..." style="float: left; margin: 0 10px 2px 0;" />
Это работает и на сайте, и в любом фидридере. С точки зрения классического подхода к написанию стилей – это, конечно, очень дурной тон, т.к. уничтожает саму суть css класов и стилей. Поэтому старайтесь минимально использовать стили, непосредственно вписанные в теги, дивы и т.п.
Добавляем свое изображение для ленты
Изначально стиль фидов вордпресса достаточно скромный. Голый текст с картинками без каких-либо логотипов и иконок. Отличный способ добавить брендирования в виде своего лого такой: Добавляем в functions.php следующий код:
function mwp_feedImage() { echo "<image> <title>Digging Into WordPress</title> <url>https://digwp.com/images/feed-icon.png</url> <link>https://digwp.com/</link> <width>150</width><height>150</height> <description>Digging Into WordPress</description> </image>";} add_action('rss2_head', 'mwp_feedImage');
Указываем в качестве адреса картинки свой и редактируем при необходимости параметры, сохраняем и любуемся красотой.
Брендирование логотипом или характерной картинкой добавит узнаваемости и запоминаемости для вашего сайта. Пользователи фидбернера могут добавить свое изображение в меню Feed Image Burne.
Добавляем комментарии в фид
Т.к. вордпресс по умолчанию исключает комментарии из главного фида, для некоторых сайтов может оказаться нужным выводить в одном месте и записи, и комментарии к ним. Простым и оригинальным способом сделать это будет использование сервиса Yahoo! Pipes. Звучит устрашающе, но на самом деле все просто.
- Регистрируемся в Yahoo! Pipes, используя Yahoo! ID
- Из меню Sources перетаскиваем виджет «Fetch Feed» на рабочее пространство
- Добавляем адреса фидов записей и фидов комментариев. Клик по + позволяет добавлять нужное количество полей для вставки адресов.
- Из меню Operators тащим виджет Sort
- В настройках сортировки выбираем опцию item.pubDate и способ сортировки descending (по убыванию)
- Соединяем виджет сортировки с выходным виджетом Pipe Output
Что происходит — в одну кучку собираются сообщения из выбранных фидов и сортируются для вывода сначала самых свежих. Нажатие ссылки Refresh обновляет содержимое фидов. После нажатия кнопки Save эта труба сохраняется на сервере яху и тихонечко себе работает каждый раз, когда к ней обращаются. Чтобы получить результат ее работы, нужно нажать Publish и выбрать «Get as RSS», чтобы получать результат работы в виде рсс-ленты, которую можно отдать на фидбернер в качестве источника фида.
И все. У вас есть объединенный фид, состоящий из самых последних записей вперемешку с последними комментариями в хронологическом порядке. Конечно, с помощью Yahoo! Pipes можно создавать очень сложные и разнообразные сервисы, при этом совершенно бесплатно. Поэтому изучайте его возможности и экспериментируйте.
Если все это показалось сложным, то можно воспользоваться RSS Mix, который позволяет перемешивать до 100 рсс-лент в одну общую.
Создаем пользовательские фиды
Есть много ситуаций, когда стандартные вордпресс-ленты нас не устраивают. Например, есть рубрики, содержимое которых мы публикуем на сайте, но не хотим, чтобы они появлялись в ленте.
Исключаем рубрики, авторов и все остальное ненужное
Вот общий формат для исключения чего-либо из рсс-ленты
https://digwp.com/feed?cat=-x,-y,-z
где cat означает, что мы исключаем категорию, а x,y,z – номера исключенных рубрик.
После этого записи этих рубрик не будут попадать в главный фид. Точно так же можно исключить любой другой ненужный элемент
- author=-n — исключает посты автора с айди n
- year=-2009 — исключает все записи, опубликованные в 2009 году
- monthnum=-11 — исключает все записи, опубликованные в ноябре
- day=-22 — исключает все записи, опубликованные 22 числа
- paged=-33 — исключает все записи с 33 страницы архива
- s=-wordpress — исключает все записи, содержащих поисковый термин wordpress
- category_name=-wordpress — исключает записи рубрики с названием wordpress
Вышеуказанные параметры можно комбинировать в любые нужные сочетания, например, вот так
https://digwp.com/feed?cat=-11&s=-apple
Разные параметры соединяются символом &
В процессе создания таких пользовательских лент верным будет самому на них подписаться, чтобы убедиться, что фильтр работает как надо. А также проверить отображение содержимого фида в разных читалках.
Исключаем рубрики в functions.php
Чтобы сохранить оригинальный урл фида, но при этом изменить его содержимое, можно внести нужные правки в functions.php
function excludeCatsfromFeed($query) { if ($query->is_feed) { $query->set('cat','-x,-y,-z'); // id исключаемых категорий } return $query; } add_filter('pre_get_posts','excludeCatsfromFeed');
И понятно, что кроме категорий, можно добавить в исключения все, что нам нужно.
Но если традиционно вам страшно или лень ковыряться в коде, то вот простое решение — плагин Ultimate Category Excluder
Фид только с выбранными рубриками, тегами, авторами
Точно также можно решать и обратную задачу — создать фид, состоящий только из перечисленных рубрик или тегов. В отличие от исключения, где использовался знак «-», для перечисление выбранного используется знак «+».
Вот типовой шаблон для перечисления рубрик
https://digwp.com/feed?cat=x+y+z
А комбинирование параметров выглядит так
https://digwp.com/feed?cat=11&s=apple https://digwp.com/feed?cat=11&year=2008&author=3 https://digwp.com/?feed=rss&tag=tag1,tag2,tag3
и так далее...
Возможны любые комбинации параметров для создания идеального и уникального фида.
Включение рубрик в functions.php
Традиционный рецепт для тех, кто не хочет колдовать с урл адресами, а предпочитает нужные правки в файлах шаблона:
function includedCatsFeed($query) { if ($query->is_feed) { $query->set('cat','x,y,z'); // выбранные рубрики } return $query; } add_filter('pre_get_posts','includedCatsFeed');
Еще больше приемов
Если вам еще не надоело, то вот полезные трюки
https://digwp.com/feed?orderby=title&order=asc – генерирует ленту записей в алфавитном порядке
Создаем фид для страницы тремя альтернативными способами:
- https://digwp.com/page/feed
- https://digwp.com/feed?pagename=page
- https://digwp.com/feed?page_id=n
Как мы помним, урл в виде айди – самый универсальный способ, на случай изменений в схеме адресации чпу или изменении названия страницы.
Стилизация фидов
Особо упертые товарищи не советуют стилизовать рсс-фиды, требуя сохранения простоты, чистоты и ясности текстов, отображаемых в читалках. Но разве можем мы быть ограничены в желании создать удобный, красивый, отформатированный текст с стильными картинками.
Как выше показывалось, самый простой способ добавить огня — это вписывать стили непосредственно в текст записи. Плагин Feedstyler позволит все это сделать быстро и легко.
Feedstyler
Плагин сохраняет оригинальные стили блога и дает возможность добавить или заменить их для стиля ленты, сохраняя итоговые стили раздельно. Есть некоторые ограничения в его работе, но в целом он позволяет значительно увеличить привлекательность записей в читалках.
Удаляем версию Вордпресс
По умолчанию вордпресс вставляет упоминание о номере версии в фид. Если посмотреть исходный код ленты, то можно в заголовках увидеть версию внутри тега <generator>
<generator>https://wordpress.org/?v=2.7</generator>
Это сделано для сбора и анализа статистики использования движка, но небезопасно. Традиционно добавим пару строчек в functions.php для удаления этой информации
function killVersion() { return ''; } add_filter('the_generator','killVersion');
А чтобы удалить номер версии и из заголовков сайта, также стоит добавить и такую строчку
remove_action('wp_head', 'wp_generator');
Чтобы удалить остальную ненужную или нежелательную информацию из секции <head> сайта, также можно добавить следующее
remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wp_generator'); remove_action('wp_head', 'feed_links', 2); remove_action('wp_head', 'index_rel_link'); remove_action('wp_head', 'wlwmanifest_link'); remove_action('wp_head', 'feed_links_extra', 3); remove_action('wp_head', 'start_post_rel_link', 10, 0 ); remove_action('wp_head', 'parent_post_rel_link', 10, 0); remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
Однако по мере выхода новых версий вордпресс часть этих функций может потерять актуальность.
Отключение и перенаправление нежелательных форматов лент
Как мы знаем, вордпресс генерирует огромное количество рсс лент разных форматов. Чтобы навести немного порядка, стоит в functions.php добавить следующее
function redirectFeed() { wp_die();header("Location: https://digwp.com/feed/");exit();}
Укажите урл, на который вы бы хотели, чтобы перенаправлялись вызовы ненужных форматов лент. А теперь задайте, какие именно форматы будут перенаправлены
add_action('do_feed', 'redirectFeed', 1); // все фиды add_action('do_feed_rdf', 'redirectFeed', 1); // RDF (RSS 0.92) add_action('do_feed_rss', 'redirectFeed', 1); // RSS 1.0 feed add_action('do_feed_rss2', 'redirectFeed', 1); // RSS 2.0 feed add_action('do_feed_atom', 'redirectFeed', 1); // Atom feed
Добавляем пользовательскую информацию в фид
Добавлять свой собственный дополнительный контент очень просто. Это может быть текст, стили и даже скрипты, которые будут отображаться в тексте записи, в rss-ленте или в любом месте сайта. По желанию можно задать контент, который будет отображать или в фиде, или в записи на сайте, или в обоих местах одновременно.
Хорошим примером может служить добавление информации об авторе или копирайтах в футер фида и рекламу ДО или ПОСЛЕ каждого поста в фиде. Возможности реально неограниченны.
Чтобы добавить пользовательский контент в фид, разместите в нашем любимом functions.php следующее
function insertContent($content) { $content = $content . '<p>А тут мы написали что-то интересное!</p>'; return $content; } add_filter('the_excerpt_rss', 'insertContent'); add_filter('the_content_rss', 'insertContent');
Все, добавленный текст будет дописан сразу же после содержимого записи, транслируемой в рсс-ленту. add filter дает возможность добавлять этот текст только в рсс, но не для отображения на сайте. Если нужно добавить текст до записи, то формат строки будет немного другой
function insertContent($content) { $content = '<p>А тут мы написали что-то интересное!</p>' . $content; return $content; } add_filter('the_excerpt_rss', 'insertContent'); add_filter('the_content_rss', 'insertContent');
Ну и для случая, когда мы хотим что-то дописать и ДО, и ПОСЛЕ поста выглядит так
function insertContent($content) { $content = ' <p>Блок рекламы номер раз</p>' . $content . ' <p>Блок рекламы номер два</p>'; return $content; } add_filter('the_excerpt_rss', 'insertContent'); add_filter('the_content_rss', 'insertContent');
Импорт и отображение внешних лент
Мы уже рассматривали способ вставки содержимого рсс-лент других сайтов в свой сайдбар. Вот плагины, позволяющие значительно расширить возможности такого встраивания не только в сайдбар, но и полным импортом содержимого других фидов на свой сайт в посты
С помощью этих плагинов можно создать автоматически наполняемые блоги, которые будут содержать и тексты, и видео, и содержимое, а в качестве источников задавать как рсс-ленты, так и youtube или ленты созданные с помощью yahoo pipes.
Задержка после публикации
Есть известная проблема с индексацией записей. Сразу после ее публикации в блоге, она отдается в рсс-ленту, из которой может попасть на любой чужой блог и там проиндексироваться раньше, чем на первоисточнике. Поэтому правильным будет задать определенный период времени между публикацией записи и ее появление в ленте.
Также это поможет избежать появления в ленте сырых, недоработанных или записей с ошибками. Как только вы нажимали на кнопку «Опубликовать» – ошибки и опечатки разлетались по сети и по подписчикам. Что не есть хорошо.
Данный код в functions.php создаст задержку в 5 минут между публикацией и трансляцией, но вы можете поставить нужный интервал для себя
function publish_later_on_feed($where) { global $wpdb; if ( is_feed() ) { $now = gmdate('Y-m-d H:i:s'); $wait = '5'; // указываем задержку 5 $device = 'MINUTE'; // минут //для других интервалов выбрать MINUTE, HOUR, DAY, WEEK, MONTH, YEAR $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait "; } return $where; } add_filter('posts_where', 'publish_later_on_feed');
Теперь есть время на исправление ошибок. Или на индексацию ботами. Если с быстрой индексацией проблемы, то время стоит увеличить.
Еще несколько фишек
Чтобы добавить свой специфический контент в футер рсс-ленты, можно воспользоваться плагином RSS Footer, который добавит заданный текст копирайта, предупреждения, рекламы, ссылок и т.п. в нижнюю часть фида. Функционал этого плагина включен в Yoast SEO плагин, но его можно использовать и отдельно.
Ozh' Better Feed – добавляет массу возможностей и настроек футера фида.
Simple Custom Content – добавляет пользовательский контент в записи и фиды в любое выбранное место.
Защищаем содержимое лент
Легкодоступность rss-лент и их содержимое искушает возможностью их стащить. Тогда как обычный пользователь и подписчик просматривает сайт и фид, добавляя их в читалку, пользуясь возможностью всегда быть в курсе актуального и свежего контента, жулики и горе вебмастера используют фиды как доноры для контента. Автоматически сгенерированные сайты не несут никакой пользы посетителям, однако из-за эксплуатации различных недостатков поисковых алгоритмов иногда могут ранжироваться выше, нежели оригинальные сайты и первоисточники.
Есть несколько способов этому помешать. Во-первых, с помощью вышеописанных способов и плагинов добавлять информацию о копирайтах и обратные ссылки на свой сайт. Во-вторых, делать существенную временную задержку появления записей в ленте, чтобы они гарантированно успели проиндексироваться на вашем сайте. В-третьих, отдавайте неполные версии записей. Тогда вы точно минимизируете вред от воровства содержимого лент.
Но самое мощное — брендируйте свой контент, создавайте неповторимый стиль и полезность информации. И тогда где бы его не опубликовали — читатель всегда сможет его идентифицировать с вами и вернется на ваш сайт.