Dzen RSS Feed
WordPress plugin for Dzen RSS feeds
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/bormotoon/dzen-rss-feed/archive/refs/heads/main.zipПлагин WordPress для генерации отдельной RSS-ленты под текущие требования Дзена.
Он не ломает стандартные ленты WordPress, умеет собирать контент из постов и CPT, поддерживает per-post overrides, даёт админскую диагностику и работает через отдельный feed endpoint.
🌐 Страница проекта: педобраз.рф/projects/dzen-rss-feedРепозиторий: https://github.com/Bormotoon/dzen-rss-feed
Содержание
- Коротко
- Что умеет
- Совместимость с текущим Дзен
- Как работает фид
- Установка
- Быстрый старт
- Настройки
- Метаполя записи
- Хуки для разработчиков
- Структура проекта
- Проверка
- Частые вопросы
- Релизы и CI
- Документация
- Поддержать проект
- Лицензия
Коротко
- отдельный RSS endpoint, по умолчанию
feed/dzen/; - безопасная нормализация HTML под текущую RSS-разметку Дзена;
- управление публикационными директивами Дзена через
category; - совместимость с актуальными правилами Дзена для изображений, GUID и
media:rating; - пер-пост переопределения через метаполя;
- transient cache и диагностика последней генерации;
- старые slugs ленты сохраняются как aliases, чтобы не ломать внешние интеграции.
Что умеет
- выбирает записи через
WP_Queryтолько из разрешённых post types; - исключает записи по метаполю, таксономиям и режиму включения;
- вытаскивает контент в двух режимах: rendered или raw;
- берёт описание из meta, excerpt или первого абзаца;
- умеет подставлять авторов, обложки и URL источника через override meta;
- фильтрует HTML через whitelist и приводит разметку к XML-safe виду;
- добавляет featured image первым HTML-блоком в
content:encoded, если такой URL ещё не встречается в теле материала; - вырезает блок источника Pedobraz и пустые Themify Builder wrappers из HTML фида;
- по настройке добавляет в конец материала отдельный абзац со ссылкой на публикацию на сайте педобраз.рф;
- выводит
guidкак стабильный opaque identifier; - выводит
media:ratingкакnonadultсscheme="urn:simple"; - экспортирует обложку в
enclosureтолько для JPEG, PNG, GIF и WebP; - умеет работать в conservative и strict режиме sanitation;
- хранит payload фида в transient cache и сбрасывает кэш при изменениях.
Совместимость с текущим Дзен
Плагин ориентирован на текущую справку Дзена для RSS:
- RSS 2.0;
- стабильный
guid, чтобы не плодить дубликаты; categoryиспользуется не для рубрик WordPress, а для публикационных директив Дзена;- публикационные директивы можно не выводить, если все поля стоят в
Auto; - поддерживаются
native-draft,format-article,format-post,index,noindex,comment-all,comment-subscribers,comment-none; - картинки поддерживаются только в форматах JPEG, PNG, GIF и WebP;
- минимальная ширина изображения для лучшего отображения - 700 px;
- первое изображение в контенте может попасть на карточку;
enclosureиспользуется для обложки материала;- featured image дублируется в тело статьи первым простым
p > imgблоком, если её URL ещё не встречается в контенте; media:ratingоставлен какnonadult;- первая разметка должна содержать минимум 10 материалов;
- за один раз не стоит отправлять больше 500 публикаций;
- на сайте должно быть не менее 3 публикаций за последний месяц.
Как работает фид
- Пользователь или бот Дзена запрашивает feed endpoint.
- Плагин проверяет, включён ли фид и существует ли кэш.
- Если кэша нет,
WP_Queryвыбирает кандидатов. MapperпреобразуетWP_Postв нормализованный DTO.Content_Sanitizerчистит HTML и приводит его к безопасному виду.Validatorпроверяет обязательные поля и Dzen-ограничения.Rendererсобирает RSS черезXMLWriter.- XML сохраняется в transient cache и отдаётся как
application/rss+xml.
Установка
- Скопируйте папку плагина в
wp-content/plugins/dzen-rss-feed/. - Активируйте плагин в админке WordPress.
- Откройте
Settings -> Dzen RSS. - Проверьте URL ленты. По умолчанию он выглядит как
/feed/dzen/.
Быстрый старт
После активации обычно хватает трёх шагов:
- Оставить
Feed slugкакdzen. - Выбрать нужные
Allowed post types. - Проверить, что у записей есть нормальный текст, изображение и чистый canonical URL.
Если нужно, можно сразу включить более строгую редактуру:
Inclusion mode-> только явно включённые записи;Sanitation mode->Strict;Debug mode-> для проверки сборки и диагностики.
Настройки
Публикационные директивы Дзена
Это главная часть, позаимствованная по смыслу у старых Zen-плагинов, но приведённая к текущему Dzen API.
| Поле | Что означает | Рекомендация |
|---|---|---|
Publication mode |
Auto или native-draft |
Для публикации с сайта обычно оставляют Auto. |
Publication format |
Auto, format-article, format-post |
Если контент длинный и богатый медиа, удобнее format-article. |
Indexing |
Auto, index, noindex |
Для материалов, которые должны попадать в поиск, обычно index. |
Comments |
Auto, comment-all, comment-subscribers, comment-none |
Для спокойного и предсказуемого поведения чаще всего comment-none. |
Если все четыре поля стоят в Auto, тег category может не выводиться совсем, и Дзен сам выберет режим конвертации.
Остальные настройки
| Поле | Назначение |
|---|---|
Enable feed |
Включает или выключает отдельный фид. |
Feed slug |
Имя endpoint фида. |
Allowed post types |
Какие типы записей можно экспортировать. |
Item limit |
Сколько записей отдавать в фид. |
Inclusion mode |
Все подходящие записи или только явно включённые. |
Author source |
Откуда брать автора. |
Summary source |
Откуда брать описание карточки. |
Full content source |
Брать rendered или raw контент. |
Добавлять ссылку на новость на сайте |
Добавляет в конец content:encoded отдельный абзац со ссылкой на публикацию на сайте педобраз.рф. |
Image source |
Откуда брать обложку. |
Excluded taxonomies |
Таксономии, записи из которых не должны попадать в ленту. |
Minimum content length |
Минимальная длина контента. |
Debug mode |
Выключает кэш и помогает отлаживать сборку фида. |
Enable diagnostics |
Сохраняет последний отчёт о генерации фида. |
Cache TTL |
Время жизни transient cache. |
Sanitation mode |
Conservative или Strict. |
Метаполя записи
Плагин поддерживает отдельные override-метаполя для каждой записи:
| Метаполе | Назначение |
|---|---|
_dzen_rss_include |
Явно включить запись в фид. |
_dzen_rss_exclude |
Явно исключить запись из фида. |
_dzen_rss_title_override |
Переопределить заголовок. |
_dzen_rss_description_override |
Переопределить описание. |
_dzen_rss_author_override |
Переопределить автора. |
_dzen_rss_image_override |
Переопределить URL обложки. |
_dzen_rss_source_url_override |
Переопределить canonical URL записи. |
_dzen_rss_pub_date_override |
Переопределить дату публикации. |
Если include и exclude включены одновременно, приоритет у исключения.
Хуки для разработчиков
Доступные фильтры:
dzen_rss_candidate_post_idsdzen_rss_feed_itemdzen_rss_publication_directivesdzen_rss_sanitized_htmldzen_rss_valid_itemsdzen_rss_cache_ttldzen_rss_allowed_htmldzen_rss_allowed_embed_hostsdzen_rss_feed_slugs
Типовые сценарии:
- добавить собственную выборку постов;
- автоматически менять публикационные директивы по рубрикам;
- расширять whitelist HTML;
- подмешивать собственные допуски для embed-контента;
- управлять кэшем на уровне проекта.
Структура проекта
dzen-rss-feed.php- bootstrap плагина.includes/- сервисы, DTO, renderer, validator, settings screen, admin pages.assets/- стили и скрипты админки.docs/- внутренняя документация, архитектура и чеклист.uninstall.php- удаление опций при деинсталляции.
Проверка
Перед публикацией полезно прогнать:
- синтаксис PHP-файлов;
- открытие feed endpoint без логина;
- наличие
guid,title,link,pubDate,content:encoded; - корректную сериализацию
media:rating; - вывод изображения только в поддерживаемом MIME-формате;
- prepend featured image в начало
content:encoded, если у записи есть post thumbnail и в теле ещё нет того же URL; - отсутствие BOM и мусора до XML declaration.
Частые вопросы
Почему category иногда отсутствует?
Потому что это допустимо. Если публикационные поля стоят в Auto, плагин не выводит category, а Дзен сам выберет поведение материала.
Почему изображение не попало в enclosure?
Обычно из-за одного из трёх случаев:
- MIME не удалось определить локально;
- формат не JPEG/GIF/PNG;
- изображение меньше рекомендуемой ширины.
Почему материал не попал в фид?
Проверьте:
- post type;
- draft/publish статус;
include/excludeметаполя;- exclusions по таксономиям;
- минимальную длину контента;
- sanitation result и diagnostics.
Можно ли поменять slug фида?
Да. Старый slug сохраняется как alias, чтобы не ломать внешние ссылки.
Документация
Релизы и CI
- CI запускается на
mainи на pull request'ах вmain. - Release workflow собирает zip-архив плагина автоматически по тегам
v*. - Архив релиза не включает
.gitи.github, поэтому подходит для установки в WordPress как обычный плагин. - Страницу релизов смотри здесь: Releases.
Поддержать проект
Плагин бесплатный. Если он избавил вас от ручной возни с лентой для Дзена — поддержите разработку:
Лицензия
Плагин распространяется под лицензией GPLv2-or-later. Полный текст лицензии находится в LICENSE.
