Делаем валидный РСС-фид для Яндекс.Дзен в Вордпресс

3 июля 2017 20

Недавно я рассказывал, как подключить Вордпресс к сервису Яндекс.Дзен. В процессе использования всплыли некоторые баги, которые мы сегодня поправим.

Правок не так много, из важного:

  • Новый паттерн в preg_replace();
  • Отработка шорткодов в контенте;
  • Валидный AUTHOR;
  • Валидный ENCLOSURE;
  • Добавил GUID;
  • Добавил метку UTM.

И еще кое-что по мелочам, теперь РСС-валидатор не ругается, дает только пару рекомендаций.

Новый шаблон фида выглядит так:

<?php
$postCount = 50; // количество записей для отображения в фиде
$posts = query_posts('showposts=' . $postCount);
header('Content-Type: '.feed_content_type('rss-http').'; charset='.get_option('blog_charset'), true);
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
<?php do_action('rss2_ns'); ?>>
<channel>
 <title><?php bloginfo('name'); ?></title>
 <link><?php bloginfo('url') ?></link>
 <description><?php bloginfo('description') ?></description>
 <language>ru</language>
 <atom:link href="<?php bloginfo('url') ?>/feed/zen/" rel="self" type="application/rss+xml" />
 <?php do_action('rss2_head'); ?>
 <?php while(have_posts()) : the_post(); ?>
 <item>
 <title><?php the_title_rss(); ?></title>
 <link><?php the_permalink_rss(); ?>?utm_source=zen</link>
 <guid><?php the_guid(); ?></guid>
 <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
 <media:rating scheme="urn:simple">nonadult</media:rating>
 <author><?php the_author_meta('user_email'); ?> (<?php the_author(); ?>)</author>
 <category>Технологии</category>
 <?php
 $gallery = get_attached_media( 'image',$post );
 foreach( $gallery as $image_url ) {
 $filesize = filesize(get_attached_file($image_url->ID));
 $imageurl = $image_url->guid;
 $imageurl = str_replace( 'https://', 'http://', $imageurl );
 echo '<enclosure url="' . $imageurl . '" type="image/jpeg" length="' . $filesize . '" />
 ';
 }
 ?>
 <description><![CDATA[<?php echo get_the_excerpt(); ?>]]></description>
 <content:encoded><![CDATA[
 <?php 
 $content = do_shortcode(get_post_field('post_content', $post->ID));
 $pattern = '/<p>((<a.+?\>)?<img.*title=\"([^\\"]+)\".*?>(<\/a>)?)<\/p>/';
 $replacement = '<figure>$1<figcaption>
 '.get_the_title().'
 <span class="copyright"><?php the_author(); ?></span>
 </figcaption>
 </figure>';
 $content = preg_replace( $pattern, $replacement, $content );
 echo $content;
 ?>]]></content:encoded>
 <?php rss_enclosure(); ?>
 <?php do_action('rss2_item'); ?>
</item>
<?php endwhile; ?>
</channel>
</rss>

Не забудьте сменить категорию и медиарейтинг.

Как подключить РСС-шаблон к Вордпресс я рассказывал в прошлой публикации.

Иван Данилин
Автор: Иван Данилин

Практикующий веб-разработчик, специализируюсь на платформе Вордпресс.

ПОДПИСАТЬСЯ

Комментарии
  1. у меня шаблон не режет html код, который есть в тексте поста и тоже отдает его rss потоке

  2. Скажите, а как подключить произвольный тип записи к дзену? Т.е. у себя на сайте записями не пользуюсь, для новостей юзаю тип записи news. И все коды в интернете не выводят произвольный тип.

  3. Доброго времени суток, Иван.
    Сделал все, как у вас написано. В дзен приняли. За это спасибо. Но есть проблема: в ленте дзен не отображаются картинки. В техподдержке написали, что в content encoded необходимо добавить тег img. Я в этом не силен, подскажите, пожалуйста, что нужно исправить в коде?

  4. Столкнулся с той же проблемой. Не отображаются картинки.
    Хотя все правильно сделал. Тоже приняли.

  5. Возможно проблема в следующем, прикрепляются не прямые урлы, на картинки, а аттачи. Как исправить чтобы прикреплялись прямые ссылки?

    Скрин http://joxi.ru/l2ZxRD6C8Ep5Dr.jpg

    • Аналогично, если решили — отпишитесь плз. Урл вродь правильный…

  6. Спасибо автору. Подскажите кто-нибудь, можно ли кириллические урлы использовать в этой ленте?

  7. Здравствуйте. У нас в rss попадает код подписи картинки [caption id="attachment_6" align="alignright" width="..."]подпись[/caption]. Можно ли его как-то подрезать при входе? А то в ленте рекомендаций выглядит отвратительно 🙁

Добавить комментарий

Лидер среди российских регистраторов доменных имён и хостинг-провадейров