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

3 июля 2017 2 092 24

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

Топ 10 продающих лендингов для Вордпресс

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

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

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

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

Всё самое новое и интересное из мира Вордпресс в моём Телеграм-канале. Подписываемся!

Популярное в этом месяце

Подпишитесь на рассылку и получайте новые материалы на электронную почту

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

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

Комментарии
  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]. Можно ли его как-то подрезать при входе? А то в ленте рекомендаций выглядит отвратительно 🙁
  8. Здравствуйте.
    После внедрения данного кода появилась проблема с урлами, к каждому добавляется /feed и получается /vyipechka/makovyiy-pirog/feed.
    Проверка на Валидность проходит!
  9. Тех поддержка написала мне следующее:

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

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

Услуги фрилансеров по фиксированной цене — 500 р.
Подробнее