=== RSS for Yandex Zen ===
Contributors: Flector
Donate link: https://money.yandex.ru/to/41001443750704/200
Tags: yandex, zen, yandex zen, rss, feed
Requires at least: 4.4
Tested up to: 6.8
Requires PHP: 5.3
Stable tag: trunk

Создание RSS-ленты для сервиса Яндекс.Дзен.

== Description ==

Данный плагин автоматически создаст на вашем сайте новую RSS-ленту для сервиса "Яндекс.Дзен" в полном соответствии с [техническими требованиями](https://yandex.ru/support/zen/publishers/rss.html) Яндекса. 

После установки плагина не забудьте проверить его настройки в "Настройках\Яндекс.Дзен".

Новые правила добавления канала в сервис Яндекс.Дзен читайте на [этой](https://yandex.ru/support/zen/publishers/site-to-channel.html) странице.

Цитата: `Для сайта site.ru проверка и привязка возможна при наборе каналом 7000 дочитываний за последние семь дней. Учитываются только публикации со средним временем дочитывания не менее 40 секунд`.

Т.е. предлагается сначала создать и заполнить канал материалами, получить 7000 дочитываний, а уже после этого можно будет добавить ленту.

Если вам понравился этот плагин, то, <strong>пожалуйста</strong>, поставьте ему 5 звезд.
 

== Frequently Asked Questions ==

= Инструкция по установке =

1. Установите плагин из админки движка "<strong>Плагины\Добавить новый</strong>".
2. Активируйте плагин в меню "<strong>Плагины</strong>".
3. Зайдите в настройки плагина "<strong>Настройки\Яндекс.Дзен</strong>" и сохраните их.
4. Это все.

= Лента не проходит валидацию, что делать? =

Лента для Яндекс.Дзена никогда не сможет пройти валидацию, так как технические требования Яндекс.Дзена несовместимы со стандартами обычного RSS. 

Если техническая поддержка Яндекс.Дзена не принимает вашу ленту и указывает на валидатор, то значит, что их не устраивает какой-либо контент ваших записей. Например, им абсолютно точно не нравятся ссылки на Youtube-ролики, скрипты рекламы, посторонние теги и прочее. Вам следуют уточнить у них, что именно их не устраивает (может, у вас банально нет изображений или не хватает текста в записях).

И еще замечание: техническая поддержка Яндекс.Дзена после вашей заявки спросит вас о том, соответствует ли лента их рекомендациям, а также попросит вас проверить ленту в валидаторе. Это не отказ! Это просто их страховка от лишних телодвижений, смело отвечайте, что лента соответствует всем их техническим требованиям.

= Лента отдается с неправильным content type, что делать? =

Плагин создает ленту с правильным контент типом "application/rss+xml". Если у вас лента отдается с другим контент типом, то весьма вероятно, что в этом виноват ваш плагин кэширования. Добавьте урл ленты в исключения плагина (все плагины кэширования имеют опцию исключения определенных страниц).

= URL источника запрещен в robots.txt, что делать? =

Добавьте в robots.txt директиву:

`Allow: /feed/zen/`

Где "zen" это имя вашей RSS-ленты.

= Как добавить "подпись" к записям ленты? =

В плагине есть два фильтра обработки контента записей. Для контента записи используется "yzen_the_content", а для описания записи "yzen_the_excerpt".

Например, добавьте в файл functions.php вашей темы код:

`function yzen_sign($content) {
    global $post;
     
    $sign = 'Сообщение "<a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a>" появилось сначала на "<a href="'.get_bloginfo_rss('url').'">'.get_bloginfo_rss('title').'</a>".';
    
    $content .= $sign;
    return $content;
}    
add_filter('yzen_the_content', 'yzen_sign');`

И вы получите подпись, аналогичную подписи от плагина Yoast SEO.

= Как изменить аргументы цикла для собственной выборки записей? =

Фильтр на аргументы цикла называется "yzen_query_args", использовать его просто:

`function my_yzen_query_args($args) {
    $args['tag'] = 'bread+baking+recipe';
    return $args;
}    
add_filter('yzen_query_args', 'my_yzen_query_args');`

В результате в ленту плагина попадут только записи, имеющие все 3 указанные метки ("bread", "baking" и "recipe").
Описание всех аргументов цикла вы можете найти в [кодексе](https://codex.wordpress.org/Class_Reference/WP_Query).

= Генерация ленты останавливается после первого тега enclosure, что делать? =

Вам необходимо включить расширение php-xml для php, которое почти у всех хостеров и так включено по умолчанию.

= Как автоматически указывать актуальность статьи в зависимости от рубрики? =

Нужный фильтр называется "yzen_type_article", использовать его просто:

`function my_type_article($yztypearticle) {
    if ( in_category( array( 'news', 'other-news' ), get_the_ID() ) ) {
        // 'true' для новостных рубрик
        $yztypearticle = 'true';
    } else {
        // 'false' для остальных рубрик
        $yztypearticle = 'false';
    }
    return $yztypearticle;
}
add_filter('yzen_type_article', 'my_type_article');`

В результате в ленте все записи из рубрик с ярлыками "news" и "other-news" будут отмечены как новостные, а записи всех остальных рубрик будут считаться актуальными всегда. Вместо ярлыков можно указывать ID рубрик.

= Как автоматически указывать тип публикации статьи в зависимости от рубрики? =

Нужный фильтр называется "yzen_type_platform", использовать его просто:

`function my_type_platform($yztypeplatform) {
    if ( in_category( array( 'news', 'other-news' ), get_the_ID() ) ) {
        // 'native-yes' - материал будет опубликован на платформе и попадет в ленту рекомендаций.
        // 'native-draft' - материал сохранится на платформе в качестве черновика. Вы можете отредактировать черновик по своему усмотрению и опубликовать.
        // 'native-no' - материал попадет в ленту RSS как публикация с сайта.
        $yztypeplatform = 'native-yes';
    }
    return $yztypeplatform;
}
add_filter('yzen_type_platform', 'my_type_platform');`

В результате в ленте все записи из рубрик с ярлыками "news" и "other-news" будут целиком опубликованы на платформе Дзен. Вместо ярлыков можно указывать ID рубрик.

= Как автоматически указывать настройку индексирования статьи в зависимости от рубрики? =

Нужный фильтр называется "yzen_index", использовать его просто:

`function my_type_index($yzindex) {
    if ( in_category( array( 'news', 'other-news' ), get_the_ID() ) ) {
        // 'index' - материал индексируется в Дзене.
        // 'noindex' - материал не индексируется в Дзене.
        $yzindex = 'noindex';
    }
    return $yzindex;
}
add_filter('yzen_index', 'my_type_index');`

В результате в ленте все записи из рубрик с ярлыками "news" и "other-news" будут отмечены как неиндексируемые на платформе Дзен. Вместо ярлыков можно указывать ID рубрик.

== Screenshots ==

1. Метабокс плагина. 
2. Основные настройки плагина. 
3. Продвинутые настройки плагина. 

== Changelog ==

= 1.28 (28.01.2021) =

* добавлены настройки публикации ("Опубликовать в Дзене", "Сохранить как черновик в Дзене", "Публикация с сайта").
* добавлены настройки индексации статей, созданных на платформе.
* добавлены фильтры "yzen_type_platform" и "yzen_index" для автоматической простановки новых настроек в зависимости от рубрики (читайте FAQ).

= 1.27 (06.07.2021) =

* добавлено указание актуальности статей (новая функция Яндекс.Дзена).
* добавлен фильтр "yzen_type_article" для автоматической простановки указания актуальности статей в зависимости от рубрики (читайте FAQ).
* исправлено формирование описаний изображений.
* исправлены js-уязвимости на странице настроек плагина.
* добавлен вывод подписи для главного изображения записи.
* добавлены фильтры "yzen_thumb_imgurl" и "yzen_thumb_caption" для вывода изображения записи в случае, если используется собственное поле для хранения изображения записи, а не "родной" функционал WordPress.

= 1.26 =

* это мини-апдейт с исправлениями ошибок.
* исправлено формирование guid (теперь там не ссылки).
* исправлено формирование даты (указывается часовой пояс).

= 1.25 =
* удалены все функции сервиса Яндекс.Турбо (используйте отдельный плагин RSS for Yandex Turbo).
* добавлена возможность включения в начало записей их "отрывков".
* добавлена возможность исключения записей из ленты по умолчанию.
* добавлен фильтр на аргументы цикла (для разработчиков для более гибкой выборки записей ленты).
* исправлено дублирование контента при использовании шорткодов некоторых плагинов (вукомерс и другие).
* удалены все лишние фильтры в фиде (исправление невалидности ленты, когда некоторые плагины изменяли ленту под себя).

= 1.24 =
* переписана функция удаления тегов с контентом (теперь она справляется со вложенностью).

= 1.23 =
* функция iconv_strlen была заменена на функцию mb_strlen (первая выдавала ошибку при плохой разметке записи - в результате отсутствовала реклама в середине записи).

= 1.22 =
* добавлена возможность включения в rss-ленту записей только указанных таксономий.

= 1.21 =
* добавлена возможность установить все поддерживаемые Яндексом счетчики на turbo-страницах.

= 1.20 =
* добавлена возможность выводить блок "похожих" записей при включенных turbo-страницах (тег &lt;yandex:related>).
* добавлена возможность отключения рекламы для конкретной записи на turbo-странице (в метабоксе плагина).
* из контента записей теперь удаляются все спец. символы юникода (как невалидные в rss).
* полностью переписаны регулярки плагина - из тегов img теперь вырезаются все лишние атрибуты.  

= 1.19 =
* я дико извиняюсь за столь частые обновления плагина!
* были оптимизированы регулярки плагина, так как в некоторых случаях мог удаляться контент записи в RSS-ленте.

= 1.18 =
* к контенту и описанию записей больше не применяется фильтр "the_content_feed" (во избежание конфликтов с другими плагинами, работающими с RSS).
* добавлены фильтры обработки контента "yzen_the_content" и описания "yzen_the_excerpt" записи.
* удален action "rss2_item" (во избежание добавления в ленту левых тегов от плагинов вроде Jetpack).
* при удалении плагина настройки плагина теперь будут полностью удалены из базы данных.
* при деактивации плагина RSS-лента плагина теперь будет выдавать обычную 404-ошибку.

= 1.17 =
* добавлен третий рекламный блок и возможность выводить рекламу в середине записи (на turbo-страницах).
* добавлена возможность отключения turbo-страниц (путем добавления turbo=&quot;false&quot; к тегу &lt;item>).
* минимальное количество записей уменьшено до 20 (изменились требования Яндекса).
* включение рекламных блоков больше не работает, если не указаны идентификаторы рекламных сетей.
* исправлено сохранение пустого значения счетчика метрики (чтобы удалить номер установленного счетчика).
* скрипты из кода плагина были перенесены во внешний файл (внутреннее изменение).

= 1.16 =
* добавлена возможность изменения имени ленты в урле.
* добавлена отдельная опция включения миниатюр на turbo-страницах.
* функция wpautop теперь обрабатывает контент после удаления тегов, а не до.
* переписана функция удаления тегов без контента (теперь она справляется с большой вложенностью).
* из разметки изображений убраны атрибуты srcset и sizes.
* исправлена ошибка парсинга изображений (когда в rss пропадал весь текст записи).

= 1.15 =
* добавлена возможность отключить разметку "автора" для изображений.
* добавлена возможность отключить разметку "описания" для изображений.
* добавлена ссылка на плагин RSS for Yandex Turbo.

= 1.14 =
* исправлено двойное отображение миниатюры записи (при включенной опции добавления в RSS миниатюры записи) на turbo-страницах.
* убран двойной заголовок в записях на turbo-страницах (оставлен тег h1, убран тег h2).

= 1.13 =
* исправлена ошибка с кодом счетчика метрики (в инструкциях яндекса была ошибка по его разметке).

= 1.12 =
* добавлена поддержка Яндекс.Турбо (в тестовом режиме).

= 1.11 =
* из заголовков убран тег "X-Robots-Tag: noindex, follow", добавляемый SEO-плагинами (изменен на "X-Robots-Tag: index, follow").

= 1.10 =
* исправлена ошибка с удалением тегов из контента записей.

= 1.09 =
* исправлен досадный баг с определением дублей в теге enclosure.

= 1.08 =
* добавлена возможность задавать описание записей в rss-ленте из SEO-плагинов. 
* добавлена возможность удалять указанные html-теги в записях (с удалением и без удаления контента этих тегов). 
* добавлена возможность удалять указанный контент из записей (по умолчанию удаляются пустые теги параграфа и тег more).
* удалены дубли картинок в теге enclosure (если изображения в записях повторяются).
* поправлена разметка миниатюр, которая при определенных условиях могла неправильно выводиться.
* теги параграфа удаляются вокруг тегов figure, если кроме figure в параграфе нет другого содержимого.
* часть настроек плагина перенесена в раздел "Продвинутые настройки".
* контент записей в rss теперь обрабатывается фильтром "the_content_feed". 
* из контента теперь удаляются ссылки на youtube-ролики (тех. поддержка яндекс.дзена заворачивает ленты с youtube-ссылками).
* исправлена разметка изображений, для которых в редакторе прописана "подпись" (в html5-коде).

= 1.07 =
* "прикрепленные" записи теперь игнорируются при выводе в rss-ленте (они выводятся на общем основании - по дате публикации).
* изменение интерфейса метабокса при редактировании записей (чекбоксы вместо селектов).
* исправлен баг формирования rss-ленты при неправильной разметке записей.

= 1.06 =
* исправлена ошибка с русскими именами изображений.
* rss-лента теперь отдается с content-type "application/rss+xml" (как стандартные rss-ленты движка).

= 1.05 =
* добавлена возможность исключать из ленты все записи указанных таксономий (рубрик, меток и т.д.).
* исправлена разметка изображений, для которых в редакторе прописана "подпись".

= 1.04 =
* исправлен баг с количеством записей в ленте (когда исключенные вручную записи все равно учитывались в общем количестве записей в ленте).

= 1.03 =
* тег iframe теперь вырезается в RSS-ленте.

= 1.02 =
* добавлена возможность включения в RSS миниатюр записей.
* убран пробел в конце тега enclosure.

= 1.01 =
* параметры из ссылок на картинки теперь вырезаются.

= 1.00 =
* первая версия.
