MisterSaver Tariff Map
WordPress plugin: интерактивная карта тарифов ЖКУ по 89 регионам России с OpenLayers + Яндекс Tiles
by MisterSaver · github.com/maxsharp72/mistersaver-tariff-map · website
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/maxsharp72/mistersaver-tariff-map/archive/refs/heads/main.zipWordPress-плагин для проекта MisterSaver.ru: интерактивная карта тарифов ЖКУ по 89 регионам России. Создаёт CPT region_tariff, шорткод [ms_tariff_map], REST-эндпоинты, страницы регионов с Schema.org разметкой и автогенерацией контента через OpenRouter API.
Стек: WordPress 6.5+, PHP 8.1+, OpenLayers 9, Яндекс Tiles API, ACF (опционально), Rank Math (опционально).
Быстрая установка (5 минут)
Шаг 1. Подключитесь к серверу по SSH
ssh user@your-server.ru
cd /var/www/mistersaver.ru/wp-content/plugins/
Замените путь на реальный путь до
wp-content/plugins/вашего сайта.
Шаг 2. Клонируйте репозиторий
git clone https://github.com/maxsharp72/mistersaver-tariff-map.git
После этого появится папка mistersaver-tariff-map/ с плагином.
Шаг 3. Активируйте плагин в админке
Откройте https://mistersaver.ru/wp-admin/plugins.php и нажмите «Активировать» рядом с «MisterSaver Tariff Map».
При активации плагин:
- Создаёт CPT
region_tariff(тип записей «Тарифы регионов») - Регистрирует таксономию
federal_districtи создаёт 8 терминов (ЦФО, СЗФО, …) - Сбрасывает rewrite-правила (URL
/tarify-zhku/{slug}/начинают работать) - Создаёт пустую запись в
wp_optionsдля настроек
Шаг 4. Откройте «Тарифы ЖКУ → Настройки» в админке
Введите два ключа:
| Поле | Откуда взять |
|---|---|
| Яндекс Tiles API ключ | developer.tech.yandex.ru → создать приложение → JavaScript API и HTTP Геокодер |
| OpenRouter API ключ | openrouter.ai/keys — нужен только для автогенерации текстов |
Можно начать без OpenRouter — карта будет работать, а тексты регионов соберутся по дефолтному шаблону.
Шаг 5. Импортируйте данные регионов
Через WP-CLI (рекомендую):
cd /var/www/mistersaver.ru/wp-content/plugins/mistersaver-tariff-map
wp ms-tariffs import --path=/var/www/mistersaver.ru
Эта команда:
- Читает
data/regions-tariffs.json(89 регионов) - Создаёт 89 записей CPT
region_tariffс тарифами в ACF/meta-полях - Привязывает каждый регион к таксономии федерального округа
- Заполняет
post_contentдефолтным шаблоном (с маркером для LLM)
После импорта проверьте: wp ms-tariffs status
Регионов в БД: 89
С данными по avg_bill: 89
С LLM-сгенерированным текстом: 0
Яндекс ключ: ✓ настроен
OpenRouter: ✓ настроен
Шаг 6. (Опционально) Сгенерируйте уникальные тексты
wp ms-tariffs generate-content
Запустит LLM (по умолчанию anthropic/claude-3.5-sonnet) для всех 89 регионов. Займёт ~5 минут, ~$1-2 на OpenRouter (по claude-sonnet).
Для тестов на 5 регионах:
wp ms-tariffs generate-content --limit=5
Шаг 7. Проверьте результат
Откройте в браузере:
- Главная карта:
https://mistersaver.ru/tarify-zhku/ - Страница региона:
https://mistersaver.ru/tarify-zhku/moskva/ - REST API:
https://mistersaver.ru/wp-json/mistersaver/v1/regions
Если URL отдают 404 — выполните wp rewrite flush или зайдите в Settings → Permalinks и нажмите «Save».
Структура плагина
mistersaver-tariff-map/
├── ms-tariff-map.php # bootstrap, регистрация хуков
├── README.md # этот файл
├── includes/
│ ├── class-cpt.php # CPT region_tariff + таксономия federal_district
│ ├── class-acf-fields.php # 30 ACF-полей региона
│ ├── class-rest.php # /wp-json/mistersaver/v1/regions[.geojson]
│ ├── class-shortcode.php # [ms_tariff_map]
│ ├── class-template-loader.php # подмена single/archive шаблонов
│ ├── class-schema.php # Schema.org Article/FAQPage/Dataset
│ ├── class-importer.php # импорт JSON → БД
│ ├── class-llm-generator.php # OpenRouter API
│ ├── class-settings.php # страница настроек в админке
│ └── class-cli.php # WP-CLI команды
├── templates/
│ ├── archive-region_tariff.php # /tarify-zhku/ (главная карта)
│ ├── single-region_tariff.php # /tarify-zhku/{slug}/
│ └── parts/
│ ├── map-full.php # HTML полной карты (8 секций)
│ ├── map-mini.php # мини-карта для страницы региона
│ ├── tariff-table.php # таблица тарифов
│ ├── avg-payment-card.php # карточка среднего платежа
│ ├── indexation-card.php # карточка индексации
│ ├── faq.php # 4 вопроса (для UI и Schema)
│ ├── cta-partner.php # партнёрский CTA
│ └── similar-regions.php # 5 соседей по ФО
├── assets/
│ ├── css/map.css # стили в духе MisterSaver
│ └── js/map.js # OpenLayers + интерактив
└── data/
├── regions-tariffs.json # 89 регионов с тарифами (источник правды)
└── regions.geojson # геометрия 89 регионов (587 KB)
Шорткоды
[ms_tariff_map] — полная карта
Главная страница карты (используется в архивном шаблоне). Можно вставить и на любую другую страницу.
[ms_tariff_map]
[ms_tariff_map mode="mini" region="moskva"] — мини-карта одного региона
Используется автоматически на страницах региона (см. templates/single-region_tariff.php).
Атрибуты
| Атрибут | Значения | Описание |
|---|---|---|
mode |
full / mini |
По умолчанию full |
region |
slug региона | Только для mode="mini" |
height |
px | Высота контейнера, по умолчанию 700 |
layer |
bill / electricity / water / hot_water / gas |
Активный слой при загрузке |
WP-CLI команды
wp ms-tariffs status # статистика по регионам
wp ms-tariffs import # импорт из data/regions-tariffs.json
wp ms-tariffs import /path/to/file.json # импорт из своего файла
wp ms-tariffs generate-content # LLM для всех без контента
wp ms-tariffs generate-content --force # перегенерировать все
wp ms-tariffs generate-content --slug=moskva --force
wp ms-tariffs generate-content --limit=5
wp ms-tariffs flush-cache # сбросить кеш REST + rewrite
Workflow обновления тарифов (2 раза в год)
При плановой индексации 1 января и 1 июля:
ssh user@server
cd /var/www/mistersaver.ru/wp-content/plugins/mistersaver-tariff-map
# Вариант 1: обновить через git pull (если изменения в репозитории)
git pull
wp ms-tariffs import
# Вариант 2: обновить точечно через свой JSON
wp ms-tariffs import /tmp/new-tariffs-2026-07.json
wp ms-tariffs flush-cache
Тексты регионов (post_content) при импорте не перезаписываются — только числа в ACF. Если хотите перегенерировать тексты:
wp ms-tariffs generate-content --force
REST API
GET /wp-json/mistersaver/v1/regions
Возвращает массив всех регионов:
[
{
"id": 77,
"slug": "moskva",
"name": "г. Москва",
"short_name": "Москва",
"district": "ЦФО",
"center_city": "Москва",
"bill": 8649,
"bill_estimated": false,
"electricity": 7.87,
"water": 65.77,
"gas": 7.99,
"tier": 5,
"has_data": true,
"url": "https://mistersaver.ru/tarify-zhku/moskva/"
},
...
]
GET /wp-json/mistersaver/v1/regions.geojson
GeoJSON FeatureCollection с геометрией + теми же properties. Кешируется на 1 час.
Интеграция с Rank Math
Плагин не конфликтует с Rank Math. Дополнительно:
- В админке каждой записи
region_tariffможно настроить SEO title/description через Rank Math - Sitemap Rank Math автоматически подхватит CPT
- Schema.org от нашего плагина дополняет (а не дублирует) разметку Rank Math
Зависимости
| Что | Требуется | Альтернатива |
|---|---|---|
| WordPress | 6.0+ | — |
| PHP | 8.1+ | — |
| ACF Pro | Желательно | Плагин работает и без ACF — использует нативные meta-поля |
| OpenRouter API | Только для LLM | Можно вручную писать тексты в админке |
| Яндекс Tiles | Желательно | Fallback на OpenStreetMap |
Лицензия
GPL v2 or later.
Поддержка
Issues и pull requests: github.com/maxsharp72/mistersaver-tariff-map/issues