Legal Entity Marks WP Registry grade A-. Low-severity findings · 1 findingWP RegistryLow-severity findings · 1 findingOpen the reportA-
WordPress-плагин для СМИ: маркировка иноагентов/экстремистских/террористических/нежелательных организаций на лету + реестр запрещённых доменов и сканер ссылок
Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/chekazoid/legal-entity-marks/releases/download/v1.14.3/legal-entity-marks-1.14.3.zipМаркировка и отслеживание упоминаний иноагентов, экстремистских, террористических и нежелательных организаций. Отчёт по упоминаниям и ссылкам.
Описание
Legal Entity Marks - плагин для сайтов, которые упоминают организации и лиц из реестров Минюста, ФСБ и НАК.
СМИ он проставляет обязательную маркировку: сноски в тексте и блок дисклеймеров. Остальным сайтам, которым маркировка не требуется, помогает видеть, где упомянуты такие организации и куда стоят ссылки на их ресурсы: ссылку на нежелательную организацию могут истолковать как участие в её деятельности. Что маркировать, а что просто отслеживать, настраивается по каждому реестру отдельно.
Плагин работает с четырьмя реестрами:
- Иностранные агенты (реестр Минюста, ФЗ-255)
- Экстремистские организации (перечень Минюста)
- Террористические организации (перечень ФСБ/НАК)
- Нежелательные организации (перечень Минюста)
Маркировка упоминаний
Плагин находит упоминания лиц и организаций в тексте статей и добавляет сноску к первому упоминанию, а в конце статьи блок юридических дисклеймеров.
Оригинальный текст в базе данных не изменяется: маркировка происходит на лету через фильтр the_content. Отключите плагин, и статьи вернутся к исходному виду.
Как ищутся имена
Фамилии и имена склоняются по правилам русского языка, поэтому находятся «по словам Иванова», «письмо Иванову», «интервью с Ивановым». Работают оба порядка слов: и «Иванов Иван» из реестра, и «Иван Иванов» из текста статьи.
Род определяется по отчеству, а если его нет, по окончанию фамилии. Женские фамилии на согласную не склоняются, поэтому «Апахончич» остаётся неизменной во всех падежах. Несклоняемые типы (-ко, -ых, -их, -аго, на гласную) берутся как есть.
Отдельная фамилия без имени засчитывается, только если полное имя встречается в той же статье. В прессе так и пишут: первое упоминание полное, дальше по фамилии. Это отсекает однофамильцев, которых в реестрах немало.
Что маркировать, а что нет
Маркировка и отслеживание разделены. У каждого реестра две независимые галочки:
- Маркировать - сноска в тексте и строка в блоке дисклеймеров.
- Отслеживать - меток на сайте нет, но упоминания и ссылки видны в разделе «Упоминания».
Это нужно, когда сайт не СМИ: маркировать нежелательные организации не требуется, а вот знать, что на них есть ссылка, важно - её могут истолковать как участие в деятельности.
Есть три готовых профиля:
- СМИ - маркируются все четыре реестра.
- Не СМИ - маркируются экстремистские и террористические, нежелательные только отслеживаются, иноагенты не затрагиваются.
- Вручную - галочки расставляет администратор.
Для иноагентов есть отдельный режим «только в цитатах и ссылках»: обычное упоминание фамилии не маркируется, а маркировка ставится там, где человека цитируют или дают ссылку на его материал. Условия настраиваются: блок цитаты, абзац с гиперссылкой, прямая речь в кавычках, встроенный пост из соцсети.
В редакторе статьи есть блок «Маркировка». Пользователь с ролью «Редактор» или выше видит, что нашёл сканер, и на каждое упоминание выбирает одно из трёх: «Автоматически» (по общим правилам плагина, с подписью, помечается оно сейчас или нет), «Всегда помечать» или «Не помечать». Два последних действуют только для этой статьи.
По умолчанию плагин помечает только действующих. Отдельной опцией можно включить маркировку тех, кого уже исключили из реестра, тогда для них выводится формулировка в прошедшем времени с датой исключения.
Упоминания и отчёт
Раздел Маркировка → Упоминания показывает все находки по записям и страницам: какой материал, кто упомянут, в какой форме найден, маркируется ли, какие в нём есть запрещённые ссылки. Есть фильтры по реестру и выгрузка в CSV.
Материал, где организация по имени не названа, но стоит ссылка на её сайт или аккаунт, тоже попадает в отчёт - со словами «только ссылка» в графе «Найдено как». Для тех, кто не маркирует, это и есть главное: ссылка на ресурс нежелательной организации может быть истолкована как участие в её деятельности.
В списке записей (Записи → Все записи) появляется фильтр «Маркировка» и колонка со счётчиками: сколько меток, сколько упоминаний без меток, сколько запрещённых ссылок.
Организация сразу в нескольких реестрах
Одна и та же организация может числиться в двух реестрах: например, DOXA это и иностранный агент (как новостной портал), и нежелательная организация (как чешское юрлицо Mnenie media z.s.). Плагин хранит обе записи и под одним упоминанием показывает все статусы: до трёх строк, дальше счётчик. В блок дисклеймеров попадают только те статусы, реестры которых маркируются, полная картина видна в отчёте.
Подзаголовки и другие поля
Темы часто выводят подзаголовок или лид отдельным блоком, мимо основного текста записи - такие упоминания сканер не видит. В настройках есть раздел «Дополнительные поля»: плагин показывает произвольные поля этого сайта, в которых лежит текст, с примером содержимого. Отметьте нужные, доступ к серверу не требуется.
Если текст собирается темой на лету и в базе его нет, тема может отдать его фильтром lem_scan_extra_text.
Брендовые названия СМИ
В реестре Минюста организации записаны официальными юридическими названиями («Интернет-издание "Вёрстка Медиа"»), а в статьях их называют брендом («Вёрстки»). Соответствие задаётся на странице Маркировка → Бренды СМИ. Список предзаполнен очевидными случаями, редакция дополняет и правит его под себя.
У каждого правила три поля:
- Искать в названии - кусок официального названия из реестра, по которому находится запись. Если правило ничего не находит, плагин показывает это прямо в таблице и предупреждает при сохранении.
- Обычные алиасы - ловятся с кавычками и без. Для различимых имён: DOXA, Медуза, Радио Свобода.
- Только в кавычках - для брендов-обычных слов: издание «Холод» пометится, «на улице холод» нет. Падежи внутри кавычек подхватываются автоматически («Вёрстки», «Вёрстке»).
Правила хранятся в базе и переживают обновление плагина; новые комплектные правила при обновлении добавляются, не затирая ваши правки.
Ручные звёздочки редактора
Если в статье редакция уже поставила *, ** или *** сразу после имени или названия (традиционная пометка иноагента), плагин считает это подтверждением: такое упоминание помечается всегда, даже там, где обычные правила его пропустили бы (одинокая фамилия без полного имени в статье, бренд-слово без кавычек). При выводе плагин заменяет ручные звёздочки своей сноской, чтобы не было задвоения.
Реестр запрещённых сайтов и сканер ссылок
Плагин ведёт реестр доменов экстремистских, террористических и нежелательных организаций и позволяет:
- Сканировать все публикации на наличие ссылок на запрещённые домены
- Просматривать результаты: какие статьи содержат ссылки, куда и с каким текстом
- Удалять запрещённые ссылки поштучно или массово (тег
<a>заменяется текстом ссылки)
В комплект включён начальный реестр из 82 доменов (Meta/Facebook/Instagram, Свидетели Иеговы, NED, Bellingcat, Медуза, ФБК и др.). Реестр пополняется вручную через админку, CLI или импорт из файлов (TXT, CSV, JSON).
Не все найденные ссылки подлежат удалению. Ссылка на ресурс нежелательной организации может толковаться как участие в её деятельности, такие ссылки убирают из текста. Ссылка на сайт иноагента ничем не запрещена, ей достаточно маркировки, и чистка её не трогает. Какие реестры считать подлежащими удалению, задаётся в настройках; по умолчанию это экстремистские, террористические и нежелательные. Домены, добавленные вручную, удаляются всегда: их внесли осознанно.
Сверх этого домены приезжают из самого реестра Минюста: у записей об иноагентах есть поле со ссылками на ресурсы организации, и при обновлении плагин забирает оттуда и собственные сайты, и аккаунты на чужих площадках.
Аккаунт хранится вместе с площадкой (t.me/doxajournal, youtube.com/@channel) и срабатывает только на него: ссылка на другой телеграм-канал или на посторонний ролик остаётся нетронутой. Так же можно добавить аккаунт вручную, просто вписав ссылку целиком в поле «Домен или аккаунт».
Каждый такой ресурс связан с записью реестра, поэтому в отчёте рядом со ссылкой видно, чей это ресурс и в каком он реестре.
Основные возможности
- Склонение фамилий и имён, оба порядка слов, учёт рода
- Брендовые алиасы СМИ: издания находятся по бренду, а не только по юрлицу
- Поддержка алиасов: «Meta Platforms» = Facebook = Instagram = Фейсбук
- Профили сайта, раздельные маркировка и отслеживание, отчёт «Упоминания»
- Фильтр и колонка со счётчиками в списке записей
- Ручное управление маркировкой в редакторе статьи
- Опциональная маркировка исключённых из реестра, с формулировкой «ранее»
- AJAX-сканеры с прогресс-баром в админке (маркировка и ссылки)
- WP-CLI команды для всех операций
- Автоматическое обновление реестров по расписанию (WP-Cron)
- Проверка всего архива после каждого обновления реестров, с отчётом о новичках
- Автоматическое сканирование при публикации поста
- Настраиваемые цвета блока дисклеймеров
- Совместимость с популярными кеш-плагинами
- Начальные данные: 2300+ сущностей и 82 запрещённых домена (реестры обновлены в июле 2026)
Что происходит после обновления реестров
Организация, о которой вчера можно было писать свободно, сегодня может оказаться в реестре. Публикация пятилетней давности со ссылкой на её сайт при этом никуда не делась, и риск возникает задним числом.
Поэтому каждое обновление реестров тянет за собой проход по всему архиву: и по тексту, и по ссылкам. Работа идёт частями в фоне, большой сайт за один запрос не обойти. Ход виден на странице «Обзор», её можно закрыть.
Когда проход закончен, на «Обзоре» появляется итог: сколько записей пополнило реестры, сколько из них встречается на сайте и в скольких материалах, сколько нашлось запрещённых ссылок. Отдельное уведомление показывается на всех страницах админки, пока его не закроют.
Найти сами материалы можно в разделе «Упоминания» отбором «Новое с последнего обновления реестров». Новым считается и то, что организацию внесли в реестр после прошлой проверки, и то, что упоминание впервые нашлось в тексте (материал могли отредактировать). Столбец «В реестре с» показывает дату включения.
Отдельный флажок «только со ссылками» оставляет в отчёте материалы, где есть ссылка на ресурс организации. Тем, кто не маркирует, а вычищает, удобно начинать с него.
Канал реестров: запасной источник
Официальные реестры отвечают не всегда. Сайт Минюста бывает недоступен, хостинг может резать исходящие соединения, адрес сервера могут заблокировать после массовых выгрузок. Раньше в таких случаях плагин откатывался на снимок из своей поставки, а он стареет с каждым днём.
Между ними встал канал реестров - сторонняя служба, которая ведёт свои срезы тех же реестров. Порядок такой: сначала официальный источник, затем канал, и только потом встроенный перечень. На «Обзоре» видно, откуда пришли данные в этот раз.
Канал ведёт три реестра из четырёх: иноагенты, нежелательные и террористические. Экстремистских там нет, для них остаётся встроенный перечень.
Подключение: в настройках включить «Использовать канал реестров» и нажать «Проверить канал». Токен для этих трёх реестров не нужен, выгрузки открыты.
Поле токена в настройках оставлено на будущее: он понадобится только для перечня Росфинмониторинга (30 775 записей, из них 29 541 физлицо), который для расстановки сносок избыточен и плагином не берётся. Пустое поле означает «работать без токена», а не «канал выключен». Токен на страницу не выводится и в клиентский код не попадает; его можно держать вне базы данных, добавив в wp-config.php строку define('LEM_CHANNEL_TOKEN', '...');
Актуальность реестров
Встроенные JSON-файлы это стартовый снимок и офлайн-фолбэк, а не постоянный источник. Сразу после установки, а также после каждого обновления плагина ставится задача подтянуть реестры из источников; дальше они обновляются по расписанию (по умолчанию раз в неделю). Если WP-Cron не работает и реестры давно не обновлялись, плагин предупредит об этом в админке.
Требования
- WordPress 6.1+
- PHP 7.4+ (рекомендуется 8.0+)
- Расширение mbstring для PHP
Установка
- Загрузите папку
legal-entity-marksв/wp-content/plugins/ - Активируйте плагин через меню «Плагины»
- При активации автоматически создаются таблицы и импортируются начальные данные
- Перейдите в Маркировка → Сканер и запустите полное сканирование
- Перейдите в Маркировка → Ссылки для проверки ссылок на запрещённые сайты
Или через WP-CLI:
wp plugin activate legal-entity-marks
wp lem scan --all --batch=500
wp lem banned-links-scan --batch=500
Помочь развитию плагина
Плагин раздаётся бесплатно, и понять, сколько людей им пользуется, можно только с помощью самих пользователей. Обе возможности ниже необязательны: без них плагин работает точно так же.
Анонимный счётчик
Раз в неделю, вместе с обновлением реестров, плагин проверяет доступность канала. Это нужно и само по себе: о запасном источнике лучше знать заранее, а не в тот момент, когда официальный реестр уже упал. Состояние канала видно на «Обзоре».
С этим запросом уходят две вещи: случайный идентификатор установки и версия плагина. Ни домена, ни адреса, ни чего-либо о содержимом сайта. Идентификатор к сайту не привязан и меняется при переустановке. Со снятой галочкой проверка канала остаётся, но уходит без этих заголовков, и посчитать установку по ней нельзя.
Выключается галочкой в настройках, раздел «Помочь развитию плагина».
Регистрация сайта
Это уже не анонимно, и делается только по нажатию кнопки. Нужна, чтобы автор мог предупредить о важном обновлении или о поломке в реестрах. Состав отправляемого показан прямо на странице настроек до нажатия: адрес сайта, его название, версии плагина, WordPress и PHP, идентификатор установки и почта для связи, если вы её впишете.
Содержимое статей, списки найденных организаций и данные редакции не отправляются ни при каких условиях.
Внешние сервисы
Плагин обращается к следующим службам. Никаких данных сайта, посетителей или редакции никуда не отправляется: во всех случаях это запрос на получение перечня.
reestrs.minjust.gov.ru, minjust.gov.ru - официальные реестры Минюста: иностранные агенты, нежелательные и экстремистские организации. Запрос уходит по расписанию (по умолчанию раз в неделю) и при нажатии «Обновить реестры».
fsb.ru - единый перечень террористических организаций.
raw.githubusercontent.com - зеркала перечней в репозитории плагина, используются когда официальный источник недоступен.
api.shliapuzhnikov.com - канал реестров, запасной источник (см. раздел выше), а также анонимный счётчик установок и регистрация сайта по кнопке (см. «Помочь развитию плагина»). Обращение происходит, только если канал включён в настройках. Выгрузки открыты, токен не требуется; если он задан, то уходит вместе с запросом и ничего больше.
Часто задаваемые вопросы
Изменяет ли плагин текст статей в базе данных?
Маркировка упоминаний - нет, она работает на лету через фильтр the_content.
Удаление запрещённых ссылок - да, при явном запуске пользователем из админки или CLI.
Можно ли отключить отдельные категории?
Да. В настройках четыре флажка: иностранные агенты, экстремистские, террористические и нежелательные организации. Выключенная категория не маркируется и не попадает в блок дисклеймеров. Пересканирование не требуется.
Можно ли маркировать иноагентов только в цитатах и ссылках?
Да, для этого есть отдельный режим в настройках. Когда он включён, обычное упоминание фамилии в тексте не маркируется, а маркировка ставится там, где человека цитируют или дают ссылку на его материал. Остальных трёх реестров правило не касается.
Что считать поводом для маркировки, настраивается: блок цитаты (вместе с подводкой и подписью в соседних абзацах), абзац с гиперссылкой, абзац с прямой речью в кавычках, встроенный пост из соцсети. После изменения этих условий нужно пересканировать статьи: признак вычисляется во время сканирования.
Что делать с ложным срабатыванием?
В редакторе статьи есть блок «Маркировка». Пользователь с ролью «Редактор» или выше видит там всё, что нашёл сканер, и на каждое упоминание выбирает одно из трёх положений:
- Автоматически - по общим правилам плагина. В подписи сразу видно, что правила дают сейчас: «сейчас помечается» или «сейчас не помечается: нет цитаты или ссылки».
- Всегда помечать - пометить вопреки общим правилам.
- Не помечать - убрать ложное срабатывание.
Два последних положения действуют только для этой статьи. Чтобы вернуть упоминание под общие правила, выберите «Автоматически».
Находит ли плагин имена в косвенных падежах?
Да. Фамилии и имена склоняются по правилам русского языка, поэтому находятся «по словам Иванова», «письмо Иванову», «интервью с Ивановым». Работают оба порядка слов: и «Иванов Иван» из реестра, и «Иван Иванов» из текста статьи.
Род определяется по отчеству, а при его отсутствии по окончанию фамилии. Это важно для женских фамилий на согласную: «Апахончич Дарья» остаётся неизменной во всех падежах, и «Апахончича» под маркировку не попадёт.
Несклоняемые типы (-ко, -ых, -их, -аго, на гласную) отдаются как есть. Склонение можно отключить в настройках.
Что с однофамильцами?
Отдельная фамилия без имени по умолчанию засчитывается, только если полное имя встречается где-то в той же статье. В прессе так и пишут: первое упоминание полное, дальше по фамилии. «Лев Пономарев заявил… Пономарев добавил…» будет размечено, а заметка про постороннего чиновника Пономарева нет.
Режим переключается в настройках. Вариант «искать всегда» ловит больше, но даёт ложные срабатывания: 13 из 24 самых частых русских фамилий есть в реестре иноагентов, а мужской родительный падеж совпадает с женским именительным («Смирнова» это и Смирнов в родительном, и Смирнова в именительном). На проверочном наборе из восьми заметок про посторонних людей режим «всегда» дал 19 ложных срабатываний, режим по умолчанию ни одного.
Ложные срабатывания в конкретной статье снимаются в блоке «Маркировка».
Как понять, кого принесло последнее обновление?
Раздел «Упоминания», отбор «Новое с последнего обновления реестров». Там останутся только те находки, которых на прошлой проверке не было: организация попала в реестр позже либо упоминание впервые нашлось в тексте. Сводку по последнему проходу видно на «Обзоре».
Надо ли запускать сканер вручную после обновления реестра?
Нет. Обновление реестров само ставит проверку архива, она идёт в фоне порциями. Ручной сканер нужен, когда вы поменяли настройки поиска или брендовые связки: тогда меняются правила, а не данные реестра.
Плагин нашёл ссылки на сайты иноагентов, их надо удалять?
Нет. Ссылаться на ресурсы иноагентов не запрещено, достаточно маркировки самого упоминания. Плагин показывает такие ссылки в отчёте как справку «чей это ресурс», а кнопка чистки их не трогает. Убираются только ссылки на ресурсы экстремистских, террористических и нежелательных организаций, плюс домены, добавленные вручную.
Проверка архива стоит на нуле и не двигается
Её запускает WP-Cron, а он срабатывает только при заходах на сайт. Если посещаемость низкая или WP-Cron отключён через DISABLE_WP_CRON, воспользуйтесь кнопкой «Проверить архив сейчас» на «Обзоре»: она прогоняет очередь из браузера, пока вкладка открыта. На «Обзоре» же видно время следующей порции и предупреждение, если WP-Cron выключен.
Почему после обновления плагина сбились настройки?
Настройки не переживают только один сценарий: когда плагин удаляют и ставят заново. При удалении WordPress запускает процедуру очистки, и до версии 1.14.1 она стирала настройки, реестры и результаты сканирования. Начиная с 1.14.1 данные остаются, а полная очистка включается галочкой.
Обновление ядра WordPress, деактивация с активацией и загрузка нового архива поверх настроек не трогают. Обновляться правильно так: «Плагины → Добавить новый → Загрузить плагин», выбрать архив и на вопрос об уже установленной версии ответить «Заменить текущей версией».
Как часто обновляются реестры?
По умолчанию - еженедельно через WP-Cron. Интервал настраивается: ежедневно, еженедельно, ежемесячно. Также можно обновить вручную из раздела «Обзор».
Как пополнять реестр запрещённых сайтов?
Часть доменов появляется сама: при обновлении реестров плагин забирает официальные сайты организаций из данных Минюста. Остальное добавляется вручную, тремя способами:
- Вручную через админку (Маркировка → Ссылки → Добавить домен)
- Массовый импорт через textarea в админке (формат: домен | название)
- Через WP-CLI:
wp lem banned-sites-add --domain=example.orgили--file=domains.csv
Поддерживаемые форматы файлов: TXT (домен | название), CSV (колонки domain/label, разделитель , или ;), JSON ([{domain, label}]).
Совместим ли плагин с кеш-плагинами?
Да. Встроенная поддержка: WP Super Cache, W3 Total Cache, WP Rocket, LiteSpeed Cache, WP Fastest Cache. Для nginx FastCGI и других решений есть хук lem_purge_post_cache (передаёт $post_id и $url).
WP-CLI команды
Реестры и сканирование
wp lem import --all # Импорт из встроенных JSON-файлов
wp lem fetch --source=all # Загрузка реестров из онлайн-источников
wp lem scan --all --batch=500 # Сканирование всех статей
wp lem scan --post_id=123 # Сканирование одной статьи
wp lem scan --recent=7 # Статьи за последние 7 дней
wp lem status # Статистика
wp lem list --type=inoagent # Список сущностей
wp lem purge-cache # Очистка кеша
Запрещённые сайты и ссылки
wp lem banned-sites # Список запрещённых доменов
wp lem banned-sites-add --domain=example.org # Добавить домен
wp lem banned-sites-add --file=domains.txt # Импорт из TXT
wp lem banned-sites-add --file=domains.csv # Импорт из CSV
wp lem banned-sites-add --json-file=data.json # Импорт из JSON
wp lem banned-links-scan --batch=500 # Сканировать ссылки
wp lem banned-links-scan --post_id=123 # Сканировать одну статью
wp lem banned-links-clean --dry-run # Пробный запуск удаления
wp lem banned-links-clean --batch=100 # Удалить запрещённые ссылки
Структура меню
- Маркировка → Обзор - статистика, быстрые действия
- Маркировка → Реестр - просмотр и редактирование сущностей
- Маркировка → Сканер - AJAX-сканирование статей на упоминания
- Маркировка → Ссылки - реестр доменов, сканер ссылок, удаление
- Маркировка → Настройки - типы записей, стили, расписание
Changelog
1.14.2
- Многословные названия теперь находятся в косвенных падежах. «Мужского государства» в тексте не совпадало с «Мужское государство» из реестра: склонять плагин умел только однословные названия на -а/-я, а остальные искал дословно. Теперь у каждого слова берётся основа, а окончание допускается любое. Условие - прописная буква: «Мужского государства» это название, «в мужском государстве» обычная речь
- Приём работает только для названий из двух слов и больше. У одиночных так недолго поймать чужое слово: «Сова» превратилась бы в «Совет»
- Плагин проверяет канал реестров раз в цикл обновления, а не только когда официальный источник упал. Прежде о доступности запасного источника можно было узнать ровно в тот момент, когда он понадобился. Состояние канала и дата его последнего среза видны на «Обзоре»
- Из-за этого же счётчик установок молчал: он ехал с запросами к каналу, а на сайте с работающим Минюстом таких запросов не возникало вовсе. Формулировка в настройках исправлена: один запрос в неделю есть
- У перечня экстремистских организаций появился запасной источник. Это единственный реестр, которого нет в канале: если страница Минюста не открывалась, откатываться было некуда, кроме снимка из поставки. Теперь между ними встало зеркало в репозитории плагина, оно обновляется с каждым выпуском. На «Обзоре» видно, когда данные пришли из зеркала
- Загрузчики реестров больше не пишут промежуточные файлы в папку плагина: разобранные записи идут прямо в базу. На части хостингов эта папка доступна только на чтение, а после каждого обновления там оставался мусор
- Плагин отстаивает свой таймаут. На сайте редакции обновление падало с «cURL error 28: Connection timeout after 10000 ms», хотя запрашивались 45 секунд: значение подменял чужой фильтр. Плагины ускорения и безопасности так делают, и для обычных запросов они правы, но страница Минюста отвечает медленно, а выгрузка иноагентов весит четверть мегабайта
1.14.1
- Удаление плагина больше не стирает данные. Чтобы обновиться, плагин нередко удаляют и ставят заново - привычка с тех времён, когда WordPress отказывался загружать архив поверх существующего. Каждый такой круг стирал настройки, реестры и результаты сканирования всего архива. Теперь при удалении данные остаются, а полная очистка включается галочкой в настройках, осознанно
- В настройках появился раздел «Обновление и удаление» с напоминанием, что обновляться нужно загрузкой поверх, с ответом «Заменить текущей версией»
- Звёздочка редактора больше не воскрешает одиночные фамилии, если их поиск выключен в настройках. У редакций старые статьи размечены вручную («Монгайт**»), и плагин ставил бы вторую метку рядом с редакционной вопреки настройке. Подтверждение брендов в кавычках звёздочкой осталось прежним
- Стиль сносок больше не печатается на страницах, где плагин ничего не пометил. Раньше он попадал в код каждой страницы сайта и создавал впечатление, что метки на странице поставил плагин, хотя звёздочки могла проставить редакция
1.14.0
- Канал реестров как запасной источник. Когда официальный реестр не отвечает, данные берутся из канала, а встроенный перечень остаётся последним рубежом. Раньше при любом сбое сразу применялся снимок из поставки плагина
- Канал ведёт иноагентов, нежелательные и террористические организации. Экстремистских там нет, для них ничего не меняется
- Токен для этих выгрузок не нужен: канал отдаёт их открыто. Поле в настройках оставлено на случай перечня Росфинмониторинга (30 775 записей, 29 541 физлицо), который для сносок избыточен. Пустое поле означает «работать без токена»
- В настройках: включение канала, адрес, поле токена и кнопка «Проверить канал» с показом даты последнего среза. Токен не выводится на страницу и не попадает в клиентский код; его можно задать константой LEM_CHANNEL_TOKEN в wp-config.php
- Проверка архива больше не может потеряться. Раньше каждая порция сама
планировала следующую одноразовым событием: стоило одному запуску не дожить
до конца (убитый процесс, лимит памяти), и цепочка рвалась - состояние есть,
задачи в очереди нет, проверка стоит. Теперь это обычная повторяющаяся
задача WordPress: пропущенный тик просто пропущен, а саму задачу видно
в
wp cron event list. По окончании она снимается с расписания - Блокировка параллельных запусков переехала в состояние проверки. Отдельная временная запись могла пережить свой срок, и тогда проверка стояла, а причина не была видна ни в админке, ни в базе
- Раздел «Помочь развитию плагина»: анонимный счётчик установок и регистрация сайта по кнопке. Счётчик отправляет случайный идентификатор и версию плагина вместе с запросами, которые и так идут на сервер канала, и выключается галочкой. Регистрация уходит только по нажатию, её состав показан на странице до отправки: адрес и название сайта, версии, идентификатор, почта по желанию
- Признак живости планировщика больше не опирается только на задачи плагина. Сразу после обновления их ещё не было, и на сайте с системным cron баннер ошибочно сообщал, что планировщик мёртв. Теперь смотрим и на общую очередь WordPress: если ближайшая задача просрочена ненадолго, планировщик работает
- Проверка архива отмечает каждую попытку. Если попытки идут, а счётчик стоит на нуле, на «Обзоре» появляется подсказка: запуск обрывается на первой порции, обычно из-за нехватки памяти. Поймать такое исключением нельзя, а по расхождению видно
- При отказе канала по частоте запросов делается одна повторная попытка: на общем адресе счётчик может быть занят соседями
- На «Обзоре» видно, откуда пришли данные при последнем обновлении
- В readme появился раздел о внешних службах, к которым обращается плагин
1.13.0
- Проход по архиву ускорен примерно в двадцать раз. Раньше на каждый материал
прогонялись все две тысячи выражений реестра; теперь сначала разбираются
слова текста, и до полной проверки доходят только те организации, чьи слова
в тексте вообще есть. На тестовом стенде 62 мс на материал превратились
в 2,3 мс. Результаты сверены с прежними на всех записях реестра: совпадают
полностью. Отключается фильтром
lem_scan_prefilter - Проход по архиву под системным cron больше не растягивается на часы. Порция ограничивалась пятнадцатью секундами из-за лимита веб-запроса, а при запуске через WP-CLI обрывать нечему: там порция теперь до двух минут
- Отключённый WP-Cron больше не выдаётся за поломку. На нормально настроенном
сервере
DISABLE_WP_CRONозначает, что задачи запускает системный cron, и плагин судит по факту их выполнения, а не по константе в конфиге - На «Обзоре» счётчик ссылок больше не называет запрещёнными ресурсы иноагентов: ссылаться на них не запрещено. Показано, сколько материалов действительно подлежат чистке
- Ложные срабатывания на обычные слова. «Голос», «база», «поколение» и подобные не ищутся вовсе: даже в кавычках это чаще оборот речи, чем название. Вернуть такое название можно на странице «Бренды СМИ» - там выбор осознанный
- Название в кавычках теперь требует прописной буквы: «новое поколение» журналистов больше не путается с движением «Новое поколение»
- Городá больше не маркируются. У записей местных отделений («Местная религиозная организация Свидетелей Иеговы «Калининград»») алиасы не создаются: в кавычках там город, а само упоминание ловится по головной записи. Уже накопленные городá убираются при обновлении
- Одно упоминание «Свидетелей Иеговы» давало две сноски: общее название висело и на головной записи, и на местном отделении. Теперь только на головной
- Аббревиатуры латинских названий: GIJN находится по Global Investigative Journalism Network, так же для CPJ, OCCRP и подобных
- Соцсети Meta маркируются по названию: Facebook, Instagram, Фейсбук, Инстаграм с падежами. Сноска своя: «продукт компании Meta Platforms, признанной в России экстремистской организацией и запрещённой». WhatsApp под запрет не подпадает и в список не входит
- У брендового правила появилось поле «своя формулировка сноски»: она пишется в запись реестра вместо общей фразы
- Из сносок убраны хвостовые двоеточия, оставшиеся от разбора страниц Минюста
1.12.0
- Из комплектного перечня экстремистских организаций убраны пять обрывков описаний со страницы Минюста. Плагин отсеивал их при импорте с версии 1.10.0, но в самих данных они оставались; заодно тот же фильтр добавлен в скрипт подготовки данных, иначе они возвращались бы со следующей выгрузкой
- Проверка архива больше не может встать навсегда. Если запуск оборвался по лимиту памяти или времени, задача выпадала из расписания и прогресс замирал. Теперь она возвращается при любом заходе в админку, а на «Обзоре» видно, когда пойдёт следующая порция и что делать, если WP-Cron отключён
- Комплектные данные (типы доменов, брендовые связки) довозятся на уже установленные сайты по собственной отметке, а не по номеру версии плагина. Раньше повторная установка того же номера пропускала эти задачи целиком
- Комплектные домены запрещённых сайтов теперь знают свой реестр. В файле с данными тип у каждого домена был всегда, но импортёр его выбрасывал, и 82 домена экстремистских и нежелательных организаций выглядели в админке как «добавлен вручную». Тип проставляется задним числом при обновлении
- При ручном добавлении домена можно указать реестр: от него зависит, убирать ли такие ссылки из текста
- Схема реестров и запрещённых доменов обновляется не только при заходе в админку. Плагин может обновиться автообновлением, и тогда WP-Cron шёл за реестрами раньше человека, а импорт писал в колонки, которых ещё нет
- Массовая чистка ссылок больше не может зациклиться на материалах, где остались только неудаляемые ссылки, и не выбрасывает их из отчёта
- Выгрузка отчёта в CSV учитывает отборы «новое» и «только со ссылками»: раньше на экране было одно, а в файле другое
- Недельная проверка архива идёт через ту же очередь, что и проверка после обновления реестров. Раньше она обходила архив одним куском без оглядки на лимит выполнения и на большом сайте молча обрывалась
- Реестр ресурсов и разбор меты отчёта больше не перечитываются по многу раз за один запрос: страница отчёта строила одно и то же дважды, а проверка ссылок дёргала базу на каждую ссылку
- Деактивация снимает разовую задачу проверки архива, удаление плагина чистит новые настройки и временные записи
- Ссылки на ресурсы иноагентов больше не считаются подлежащими удалению. В 1.10.0 плагин начал забирать сайты и аккаунты организаций из реестра Минюста, и все они попали в один список с ресурсами экстремистских и нежелательных организаций. На сайте СМИ это означало, что кнопка чистки снесла бы обычные ссылки на издания. Теперь каждый ресурс знает свой реестр, а какие реестры чистить, задаётся в настройках
- На странице «Ссылки» видно реестр каждого ресурса и пометку «не удаляется», а кнопка чистки называет, сколько ссылок реально уйдёт
- Массовая чистка больше не зацикливается на материалах, где остались только неудаляемые ссылки, и не выбрасывает их из отчёта
- Кнопка «Проверить архив сейчас» на «Обзоре»: очередь прогоняется из браузера, не дожидаясь WP-Cron. Там же видно время следующей порции и предупреждение, если WP-Cron отключён через DISABLE_WP_CRON
- Отчёт «Упоминания»: поправлена ширина столбцов, из-за седьмой колонки таблица разъезжалась и колонка со ссылками схлопывалась
- Проверка источников больше не пишет «записей в реестре: 0», когда реестр отвечает нормально, но числа записей в ответе нет
1.11.0
- Обновление реестров само запускает проверку всего архива: и текстов, и ссылок. Раньше архив пересматривался по отдельному недельному расписанию, а ссылки не пересматривались вовсе, и материал пятилетней давности со ссылкой на свежую нежелательную организацию оставался незамеченным
- Проверка идёт в фоне порциями, с ограничением по времени и самоперезапуском, поэтому не роняет сайт и не обрывается на середине. Ход виден на «Обзоре»
- Итог обновления: сколько записей пополнило реестры, сколько из них встречается на сайте, сколько нашлось запрещённых ссылок. Показывается на «Обзоре» и отдельным уведомлением в админке
- В отчёте «Упоминания» появился отбор «Новое с последнего обновления реестров», столбец «В реестре с» и флажок «только со ссылками». Раньше отличить свежую находку от лежавшей годами было нельзя
- Каждая находка запоминает, когда её увидели впервые, и не теряет эту отметку при пересканировании
- Профиль сайта расставляет галочки реестров сразу, не дожидаясь сохранения. Переключение на «Вручную» больше не снимает маркировку со всего сайта: отключённые галочки браузер не отправлял, и списки сохранялись пустыми
- Террористический перечень: вместо nac.gov.ru, где список рисует скрипт в браузере и разбор всегда давал ноль записей, используется зеркало в репозитории плагина. Сообщение об ошибке теперь называет причину и говорит, что сайт работает по встроенному перечню
- Кнопка «Проверить источники» на «Обзоре»: показывает, что видит именно этот сервер. Хостинг может резать исходящие соединения, и без такой проверки причина «реестры не обновляются» со стороны не видна
1.10.0
- Домены запрещённых ресурсов теперь приезжают из реестра Минюста автоматически: в записях об иноагентах есть поле со ссылками, оттуда берутся собственные сайты организации
- Аккаунты на чужих площадках отслеживаются поимённо: запрещён не телеграм целиком,
а
t.me/doxajournal, не YouTube, а конкретный канал. Ссылка на другой канал или на посторонний ролик остаётся нетронутой. Аккаунт можно добавить и руками - достаточно вписать ссылку целиком - Материал, где организация по имени не названа, но стоит ссылка на её ресурс, раньше в отчёт не попадал совсем: отчёт строился только по находкам в тексте. Теперь такие записи видны со словами «только ссылка»
- В отчёте рядом с найденной ссылкой видно, чей это ресурс и в каком он реестре. Раньше был только домен, и по нему приходилось догадываться самостоятельно
- Названия с хвостом страны и организационно-правовой формы теперь дают алиас без хвоста: «Eurasianet, США» ищется как Eurasianet, «Dekoder gGmbH, ФРГ» как Dekoder, «Mnenie media z.s., Чешская Республика» как Mnenie media. В статьях пишут именно так, а поиск шёл по строке целиком, поэтому 322 записи реестра находились только при дословном совпадении
- Обрывки описаний со страниц Минюста больше не заводятся как организации. Парсер брал абзацы подряд, и в реестр попадали строки вроде «Организация исключена в связи с ликвидацией» или «эмблема Партии представляет собой»
1.9.0
- Маркировка и отслеживание разделены. Реестр можно отслеживать без меток на сайте: упоминания и ссылки видны в отчёте. Нужно тем, кто не СМИ: ссылку на нежелательную организацию важно найти, а маркировать её не требуется
- Профили сайта: «СМИ», «Не СМИ», «Вручную»
- Новый раздел «Упоминания»: все находки по записям и страницам, кто упомянут, найденная форма, маркируется или нет, запрещённые ссылки. Выгрузка в CSV
- Фильтр в списке записей: с маркировкой, с отслеживаемыми упоминаниями, с запрещёнными ссылками, без находок. Плюс колонка со счётчиками
- Одна организация может быть в нескольких реестрах сразу (DOXA это и иноагент, и, через чешское юрлицо, нежелательная). Раньше второй статус молча терялся. Теперь одно упоминание получает одну сноску, а под ней перечислены все статусы: до трёх, дальше счётчик
- Алиасы теперь строит сам плагин при импорте. Раньше это делал только скрипт подготовки данных, поэтому организации, попавшие в реестр после сборки плагина, приезжали вообще без алиасов и находились только по полному юридическому названию
- Однословные названия организаций склоняются: «от создателей Медузы», «по данным Медиазоны» раньше проходили мимо
- Дополнительные поля записи: темы часто выводят подзаголовок отдельным блоком
мимо основного текста, и такие упоминания сканер не видел. В настройках
показываются произвольные поля сайта с примером текста, отметьте нужные.
Для текста, которого нет в базе, есть фильтр
lem_scan_extra_text - Брендовые связки для нежелательных СМИ: DOXA (Mnenie media z.s.), Bellingcat, Free Russia Foundation, Open Russia, Atlantic Council
- В реестр запрещённых доменов добавлены сайты нежелательных изданий
- Дисклеймер больше не печатается, если метку в текст поставить не удалось
1.8.2
- Исправлено ложное срабатывание на обычной речи: Минюст перечисляет альтернативные названия внутри записи, и оттуда в алиасы попадали обороты вроде «Служба поддержки» и названия стран. Фраза «служба поддержки для журналистов» помечалась как нежелательная организация
- Теперь алиас из двух-трёх общеупотребительных слов ищется только в кавычках: организация «Служба поддержки» помечается, оборот речи нет. Затронуто 2% алиасов, все проверены вручную. То, чт
This README is longer than the copy stored here. Read the rest on GitHub →
Releases
23 releases. Each count is every asset in that release; expand a row for the breakdown.