Наткнувшись недавно на ленту Хабра, и открыв прямую ссылку на RSS не в NewsFox, а просто во вкладке, я очень удивился наличию в ленте картинок и прочего HTML-форматирования. Мои-то ленты выглядят так только в ридерах, да на странице FeedBurner, но не в "голом" Firefox.
Естественно, захотелось поковырять ещё и сделать себе так же, и конечно же получилось. Хотя этот твик и может вызвать определённые проблемы, о которых ниже.
Так почему же FF сразу не показывает HTML в RSS WordPress'а? Потому что изначально WP просто не поддерживает HTML в лентах вообще. "Красивый" текст на выходе, а также футер и обрезку поста по тегу <!--more-->
добавляет плагин Ozh' Better Feed.
Но даже после этого, FF не будет отображать форматирование.
Вот пример XML-кода RSS-ленты:
<item> <description><![CDATA[Plain text only]]></description> <content:encoded><![CDATA[Some <b>HTML</b> text]]></content:encoded> ... </item> |
(остальные теги внутри
опущены)
Проблема в том, что некоторые ридеры показывают содержимое <description>
игнорируя <content:encoded>
, даже если на самом деле поддерживают этот элемент. В их число и входит всеми нами любимый огнелис.
На самом деле, спецификация RSS 2.0 разрешает HTML в <description>
, если для экранирования запрещённых в XML символов использованы Esc-последовательности.
<content:encoded>
оставлено для совместимости.
Кстати, Mozilla рекомендует делать именно так (как и указано в примере выше).
Такую ленту генерирует по умолчанию WP.
И это правильно. Если вы откроете ленту с лишними тегами в <description>
, в ридере поддерживающем только RSS 1.0, получите вместо нормального текста код.
Хотя сейчас, наверное, таких и нет уже. Непонятно только, почему Firefox так поступает.
Это к слову о проблемах: что предпочесть, красоту или совместимость — решать вам.
В принципе, это проблема FF (и других, которые игнорируют <content:encoded>
), и менять правильное поведение движка несколько нелогично.
Я же у себя решил пофиксить это дело.
Итак, практическая часть, что именно изменить в файлах вордпресса, если вы все-таки решили это сделать.
Твик
В файле wp-includes/feed-rss2.php замените:
44 45 46 47 48 49 50 51 | <?php if (get_option('rss_use_excerpt')) : ?> <description><![CDATA[<?php the_excerpt_rss() ?>]]></description> <?php else : ?> <description><![CDATA[<?php the_excerpt_rss() ?>]]></description> <?php if ( strlen( $post->post_content ) > 0 ) : ?> <content:encoded><![CDATA[<?php the_content() ?>]]></content:encoded> <?php else : ?> <content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded> |
на:
44 45 46 47 48 49 50 51 | <?php if (get_option('rss_use_excerpt')) : ?> <?php else : ?> <?php if ( strlen( $post->post_content ) > 0 ) : ?> <description><![CDATA[<?php the_content() ?>]]></description> <?php else : ?> <description><![CDATA[<?php the_excerpt_rss() ?>]]></description> |
Если вы внимательно прочитали предыдущий текст, то поняли что wp-includes/feed-rss.php трогать НЕ надо.
wp-includes/feed-atom.php и wp-includes/feed-rdf.php тоже можно исправить, хотя формат самих тегов там естественно другой, принцип исправления тот же.
Я этого делать не стал, потому что на FeedBurner отправляется именно RSS2-лента. Думаю, так у большинства.
Результат
До:
и после:
На сегодня всё.
Может придумаю, что ещё улучшить в лентах, тогда расскажу :-)
P.S. уже написав эту статью, я нашёл скрипт, делающий то же самое, но без модификации файлов движка.
Так как использование внешней обработки уже после генерации ленты, по идее, должно замедлить ее открытие, пробовать не стал.
Последние комментарии