Делаем валидный РСС-фид для Яндекс.Дзен в Вордпресс
Недавно я рассказывал, как подключить Вордпресс к сервису Яндекс.Дзен. В процессе использования всплыли некоторые баги, которые мы сегодня поправим.
Правок не так много, из важного:
- Новый паттерн в 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
ПодробнееКомментарии
Добавить комментарий
Большое спасибо за отличный фид. Поддержка Яндекс.Дзена сказала, что необходимо из ленты удалить теги: ,
, < blockquote >, , , спецсимволы HTML, любые ссылки на youtube, instagram и т.д.Как это можно сделать?
В настоящий момент лента содержит форматную ошибку, мы не можем её прочитать:
Format error: text/html;charset=UTF-8 is not an XML media type
Что это значит и что нужно поправить?
После внедрения данного кода появилась проблема с урлами, к каждому добавляется /feed и получается /vyipechka/makovyiy-pirog/feed.
Проверка на Валидность проходит!
$posts = query_posts(array(‘showposts’ => $postCount, ‘post_type’ => ‘page’));
Не Помогло(
This feed does not validate.
line 33, column 1: url must be a full URL: _http://rus-bel.online/wp-content/uploads/elvira.jpg
Скрин http://joxi.ru/l2ZxRD6C8Ep5Dr.jpg
Хотя все правильно сделал. Тоже приняли.
Сделал все, как у вас написано. В дзен приняли. За это спасибо. Но есть проблема: в ленте дзен не отображаются картинки. В техподдержке написали, что в content encoded необходимо добавить тег img. Я в этом не силен, подскажите, пожалуйста, что нужно исправить в коде?
Валидатор — https://validator.w3.org/feed/
По поводу редактора сказать не могу.