Как подключить Вордпресс к Яндекс.Дзен

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

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

На этой неделе на меня обрушился шквал заявок на подключение сайтов к новому сервису Яндекс.Дзен.

Яндекс.Дзен — это сервис персональных рекомендаций Яндекса. Он составляет подборку новостей, постов из блогов и иных публикаций, которые могут быть вам интересны.

К сожалению, дефолтный РСС-фид Вордпресс не соответствует требованиям Яндекса. И для успешного прохождения технической модерации необходимо создать дополнительный.

Делается это очень просто. Особенно если взять за основу инструкцию по созданию кастомных фидов на WPbeginner, ссылка в конце.

1. В файле functions.php активной темы создаем новый фид и называем его zen, например.

add_action('init', 'customRSS');
function customRSS(){
	add_feed('zen', 'customRSSFunc');
}

В этом случае фид будет иметь адрес /feed/zen

2. В директории темы создаем новый файл, называем его rss-zen.php — это будет шаблон нового фида.

3. Вставляем в шаблон следующий код.

<?php
$posts = query_posts('showposts=50');
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>
 <?php do_action('rss2_head'); ?>
 <?php while(have_posts()) : the_post(); ?> 
 <item>
 <title><?php the_title_rss(); ?></title>
 <link><?php the_permalink_rss(); ?></link>
 <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(); ?></author>
 <category>Технологии</category>
 <?php
 $gallery = get_attached_media( 'image',$post );
 foreach( $gallery as $image_url ) {
 echo '<enclosure url="' . $image_url->guid . '" type="image/jpeg"/>
 ';
 }
 ?>
 <description><![CDATA[<?php echo get_the_excerpt(); ?>]]></description>
 <content:encoded><![CDATA[
 <?php $content=get_post_field('post_content', $post->ID);
 $pattern = '/(<img([^>]*)>)/i';
 $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>

В коде меняем category на свою из списка категорий Яндекс.Дзен:

Происшествия, Политика, Война, Общество, Экономика, Спорт, Технологии, Наука, Игры, Музыка, Литература, Кино, Культура, Мода, Знаменитости, Психология, Здоровье, Авто, Дом, Хобби, Еда, Дизайн, Фотографии, Юмор, Природа, Путешествия.

Если контент сайта относится к категории для взрослых, обязательно меняем nonadult на adult в этой строке.

<media:rating scheme="urn:simple">nonadult</media:rating>

UTM-метки добавляются следующим образом:

<link><?php the_permalink_rss(); ?>?utm_source=zen</link>

4. Подключаем шаблон к новому фиду в functions.php.

function customRSSFunc(){
 get_template_part('rss', 'zen');
}

5. Открываем админку Вордпресс, идем в настройки постоянных ссылок и нажимаем кнопку «Сохранить изменения». Структура обновится и новый фид будет доступен по адресу /feed/zen.

Отправляем фид на модерацию с помощью формы обратной связи Дзена в разделе «Создание и настройка канала».

Через некоторое время придет письмо с подтверждением подключения.

Подтверждение подключения к Яндекс.Дзен

По материалам:

UPD: Исправленный валидный фид здесь

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

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

Подробнее
Комментарии
  1. Добрый день!
    Не подскажете в чём может причина, у меня не у всех постов добавляется изображения
  2. А еще можно воспользоваться плагином из репозитория:
    https://ru.wordpress.org/plugins/rss-for-yandex-zen/
  3. Можно к Вам обратиться настроить рсс ленту на моем сайте? Сколько это будет стоить?
  4. Подскажите пожалуйста, как можно отслеживать статистику (просмотры, лайки и пр.)? В Яндекс.Метрике не нашел такой отчет. Как я понимаю, подключенная по этой инструкция лента — это не созданный канал в Яндекс.Дзене.
  5. Спасибо за подробную инструкцию, надеюсь все получится.
    Имеется 1 вопрос, что сделать, чтобы реализовать это:
    UTM-метки добавляются следующим образом:
    1 ?utm_source=zen
  6. Как убрать ошибку в валидаторе? из-за этого новости не получают трафика, говорят в техподдержке.
    line 25, column 0: Non-html tag: figcaption (91 occurrences) [help]
    <![CDATA[
  7. А как насчет добавить в скрипт поддержку видео ? Сейчас он его не видит
  8. Иван, подскажите, а время обновления у этой rss-ленты какой? На данный момент в rss попала новость, которая была в 17.00, после этого было еще 2 новости, но rss пока не обновилась.
    • Ольга, фиды в Вордпресс обновляются каждые 12 часов, есть хук wp_feed_cache_transient_lifetime, которым можно изменить время жизни кэша.
  9. <![CDATA[ выдает ошибки в валидаторе: content:encoded should not contain srcset attribute, content:encoded should not contain sizes attribute. Фид не валиден!
Добавить комментарий