Плагин WordPress для генерации отдельной RSS-ленты под текущие требования Дзена.
Он не ломает стандартные ленты WordPress, умеет собирать контент из постов и CPT, поддерживает per-post overrides, даёт админскую диагностику и работает через отдельный feed endpoint.
Репозиторий: 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 виду;
- вырезает блок источника 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используется для обложки материала;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 контент. |
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-формате;
- отсутствие BOM и мусора до XML declaration.
Потому что это допустимо. Если публикационные поля стоят в Auto, плагин не выводит category, а Дзен сам выберет поведение материала.
Обычно из-за одного из трёх случаев:
- MIME не удалось определить локально;
- формат не JPEG/GIF/PNG;
- изображение меньше рекомендуемой ширины.
Проверьте:
- post type;
- draft/publish статус;
include/excludeметаполя;- exclusions по таксономиям;
- минимальную длину контента;
- sanitation result и diagnostics.
Да. Старый slug сохраняется как alias, чтобы не ломать внешние ссылки.
- CI запускается на
mainи на pull request'ах вmain. - Release workflow собирает zip-архив плагина автоматически по тегам
v*. - Архив релиза не включает
.gitи.github, поэтому подходит для установки в WordPress как обычный плагин. - Страницу релизов смотри здесь: Releases.
Плагин распространяется под лицензией GPLv2-or-later. Полный текст лицензии находится в LICENSE.