Skip to content

Bormotoon/dzen-rss-feed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dzen RSS Feed

CI Latest release

Плагин WordPress для генерации отдельной RSS-ленты под текущие требования Дзена.

Он не ломает стандартные ленты WordPress, умеет собирать контент из постов и CPT, поддерживает per-post overrides, даёт админскую диагностику и работает через отдельный feed endpoint.

Репозиторий: https://github.com/Bormotoon/dzen-rss-feed

Содержание

Коротко

  • отдельный 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 публикаций за последний месяц.

Как работает фид

  1. Пользователь или бот Дзена запрашивает feed endpoint.
  2. Плагин проверяет, включён ли фид и существует ли кэш.
  3. Если кэша нет, WP_Query выбирает кандидатов.
  4. Mapper преобразует WP_Post в нормализованный DTO.
  5. Content_Sanitizer чистит HTML и приводит его к безопасному виду.
  6. Validator проверяет обязательные поля и Dzen-ограничения.
  7. Renderer собирает RSS через XMLWriter.
  8. XML сохраняется в transient cache и отдаётся как application/rss+xml.

Установка

  1. Скопируйте папку плагина в wp-content/plugins/dzen-rss-feed/.
  2. Активируйте плагин в админке WordPress.
  3. Откройте Settings -> Dzen RSS.
  4. Проверьте URL ленты. По умолчанию он выглядит как /feed/dzen/.

Быстрый старт

После активации обычно хватает трёх шагов:

  1. Оставить Feed slug как dzen.
  2. Выбрать нужные Allowed post types.
  3. Проверить, что у записей есть нормальный текст, изображение и чистый 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_ids
  • dzen_rss_feed_item
  • dzen_rss_publication_directives
  • dzen_rss_sanitized_html
  • dzen_rss_valid_items
  • dzen_rss_cache_ttl
  • dzen_rss_allowed_html
  • dzen_rss_allowed_embed_hosts
  • dzen_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.

Частые вопросы

Почему 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.

Packages

 
 
 

Contributors

Languages