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

Опубликовано 7 лет назад

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

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

  • Новый паттерн в 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 = '/((<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>

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

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

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

Фулстек веб‑разработчик, специализируюсь на платформе WordPress

Подробнее
Комментарии
  1. Здравствуйте.
    Большое спасибо за отличный фид. Поддержка Яндекс.Дзена сказала, что необходимо из ленты удалить теги: , , < blockquote >, , , спецсимволы HTML, любые ссылки на youtube, instagram и т.д.
    Как это можно сделать?
  2. Тех поддержка написала мне следующее:

    В настоящий момент лента содержит форматную ошибку, мы не можем её прочитать:
    Format error: text/html;charset=UTF-8 is not an XML media type

    Что это значит и что нужно поправить?
  3. Здравствуйте.
    После внедрения данного кода появилась проблема с урлами, к каждому добавляется /feed и получается /vyipechka/makovyiy-pirog/feed.
    Проверка на Валидность проходит!
  4. Здравствуйте. У нас в rss попадает код подписи картинки [caption id="attachment_6" align="alignright" width="..."]подпись[/caption]. Можно ли его как-то подрезать при входе? А то в ленте рекомендаций выглядит отвратительно 🙁
  5. Спасибо автору. Подскажите кто-нибудь, можно ли кириллические урлы использовать в этой ленте?
  6. День добрый. Не подскажете в чем может быть проблема? Валидатор выдает следующее сообщение:

    This feed does not validate.

    line 33, column 1: url must be a full URL: _http://rus-bel.online/wp-content/uploads/elvira.jpg
  7. Возможно проблема в следующем, прикрепляются не прямые урлы, на картинки, а аттачи. Как исправить чтобы прикреплялись прямые ссылки?

    Скрин http://joxi.ru/l2ZxRD6C8Ep5Dr.jpg
  8. Столкнулся с той же проблемой. Не отображаются картинки.
    Хотя все правильно сделал. Тоже приняли.
  9. Доброго времени суток, Иван.
    Сделал все, как у вас написано. В дзен приняли. За это спасибо. Но есть проблема: в ленте дзен не отображаются картинки. В техподдержке написали, что в content encoded необходимо добавить тег img. Я в этом не силен, подскажите, пожалуйста, что нужно исправить в коде?
  10. Скажите, а как подключить произвольный тип записи к дзену? Т.е. у себя на сайте записями не пользуюсь, для новостей юзаю тип записи news. И все коды в интернете не выводят произвольный тип.
  11. у меня шаблон не режет html код, который есть в тексте поста и тоже отдает его rss потоке
Добавить комментарий