WordPress-плагин: Диаграмма GitHub коммитов (GitHub Commit Chart)

Так как я увлёкся автоматизацией и завёл гитхаб, мне захотелось разместить на сайте живую диаграмму своих коммитов. Можно, конечно, сделать картинкой, но её же нужно постоянно обновлять.

Загуглил. Нашёл Github Commit Contribution Graph за 13 долларов. Можно, конечно, попробовать заплатить, обойдя санкции, но зачем, когда я окончил промпт-инженерные курсы и освоил вижуал студию. Завайбкодим свой чебураший плагин, с админкой и хуками.

Книжки можно, в принципе, и самому написать

Сергей Лукьяненко, писатель

Сказано — сделано. Вооружившись SourceCraft, RooCode и ChatGPT, я взялся за дело. В итоге родился плагин, выводящий вот такое (загрузка требует какое-то время):

Загрузка диаграммы коммитов…

В настройках плагина в админке надо ввести юзернейм (можно нажать на кнопку проверки, существует ли юзернейм, чтобы убедиться, что не опечатались), он будет применяться к блоку по-умолчанию. В настройках конкретного блока можно ввести конкретный юзернейм, вот, например, диаграмма гитхаба моего преподавателя:

Загрузка диаграммы коммитов…

Отображение на всю ширину содержимого и на всю страницу ещё не делал. Можете прислать пулл-реквест, если руки чешутся.

  • Сделал вставку при помощи шорткода (синтаксис описан на странице админки).
  • Сделал выбор тега, которым будет оформлен заголовок блока, от H2 до план текста.
  • Сделал отображение точной даты и количества коммитов при наведении на квадратик.
  • Сделал поддержку GitHub токена для увеличения лимита запросов для высоконагруженных сайтов. Без токена тоже работает.
  • Сделал опцию добавления ссылки на репо в заголовке.
  • Сделал переключение лет в заголовке.
  • Сделал плавную подгрузку при переключении лет.

Меня немного раздражает орущий линтер. Типа, Undefined function и хоть ты тресни. Наверное, есть какое-то расширение для VSC, которое способно заставить IDE принять особенности вордпресса и заткнуться. А пока проект с 51 ворнингом, хотя всё работает без ошибок.

Теперь о том, где его забрать. Плагин лежит в репо, в котором будут и все остальные мои плагины по папкам. Папка называется github-commit-chart. Эту папку надо упаковать в зип и скормить установщику плагинов вордпресса. Или не упаковывать, а сразу залить по ftp в каталог плагинов. Если интересно, как он устроен, можете почитать пояснительную записку.

В планах добавить его в каталог вордпресса.

Пишите issues, если найдёте баг или придумаете, как улучшить плагин.

История изменений

2.1.1
19.11.2025
  • Полная реализация 6-летней истории коммитов через GitHub Search API
  • Новый метод get_all_user_commits() для поиска всех коммитов пользователя
  • Поддержка contributions в чужих репозиториях (не только собственные)
  • Оптимизированные запросы по конкретному году для минимальной нагрузки
  • Отдельное кэширование all_commits для каждого года (2020-2025)
  • Расширенная валидация года с диапазоном 6 лет в AJAX обработчике
  • Точное соответствие GitHub contributions через Search API
  • Защита от бесконечных циклов — максимум 10 страниц (1000 коммитов)
  • Обновленная документация и пояснительная записка pz.md
  • Критическое ограничение GitHub Events API на 300 событий
  • Потеря старых данных пользователей с большой историей
  • Проблема получения данных старше 3-6 месяцев
  • Неточное соответствие GitHub contributions graph
  • Отсутствие поддержки contributions в чужих репозиториях
2.1.0
19.11.2025
  • Полная интеграция GitHub Events API для отслеживания всей активности
  • Поддержка коммитов, Issues, Pull Requests, ревью и комментариев
  • Умная система взвешивания активности с разными весами для типов событий
  • Исправлена фильтрация по author вместо committer для точности
  • Включены форкнутые репозитории в анализ активности
  • Поддержка пагинации: до 1000 коммитов и 500 событий
  • Новые методы API: get_user_events(), is_relevant_event(), calculate_event_weight()
  • Обновленная система кэширования с keys events_ и activity_
  • Комплексная валидация входных данных и защита от ошибок
  • Удалена проблемная функция usleep() для совместимости
  • Защита от фатальных ошибок PHP с graceful degradation
  • Полная техническая документация pz.md (350 строк)
  • Критическая ошибка 500 при загрузке данных
  • Неточность подсчета активности по сравнению с GitHub
  • Ограничение на 100 коммитов без пагинации
  • Исключение активности из форкнутых репозиториев
2.0.1
10.11.2025
  • Улучшенная система локализации с автоматическим переключением языка
  • Синхронизация языков между админкой и фронтендом
  • Корректное отображение названий месяцев и дней на диаграмме
  • Оптимизированная система загрузки переводов
  • Улучшенная обработка языковых настроек WordPress
  • Проблемы с переключением языка в диаграмме
  • Некорректное отображение локализованных элементов
1.8.4
25.10.2024
  • Полный рефакторинг архитектуры на модульную систему
  • Создание специализированных классов: Assets Manager, AJAX Handler, Shortcode Handler
  • Полная поддержка WP-L10n для многоязычности
  • Усиленная валидация входных данных с sanitize_text_field()
  • Улучшенная обработка nonce для AJAX запросов
  • Оптимизированное кеширование и версионирование ресурсов
  • Лучшая обработка ошибок и edge cases
  • Дублирование кода в системе ресурсов
  • Проблемы с безопасностью при обработке пользовательских данных
1.8.2
15.10.2024
  • Заполнение недостающих месяцев пустыми блоками в диаграмме
  • Отображение плейсхолдера с поясняющей надписью при загрузке
  • Улучшенная обработка пустых ячеек (серых блоков)
  • Неправильное отображение месяцев в диаграмме коммитов
  • Пробелы в диаграмме в конце года
1.8.1
08.10.2024
  • Плавная анимация интерфейса при переключении лет
  • Статичные заголовки и селекторы при переключении
  • Индикатор загрузки при получении данных
  • Плавные переходы при отображении диаграммы
  • "Прыганье" блока диаграммы при переключении лет
  • Неплавная работа селектора года
1.8.0
01.10.2024
  • Селектор года для переключения между периодами коммитов
  • Отображение 6 предыдущих лет + текущий год
  • Центрирование селектора относительно диаграммы
  • Lazy loading для коммитов предыдущих лет
  • Плавная анимация загрузки без "прыжков" интерфейса
1.7.0
20.09.2024
  • Поддержка GitHub токенов для увеличения лимитов API
  • AJAX проверка токенов в реальном времени
  • Повышение лимитов с 60 до 5000 запросов/час
  • Настройка токена в админ-панели плагина
1.6.0
10.09.2024
  • Кликабельные ссылки на GitHub профили в заголовках диаграмм
  • Открытие ссылок в новой вкладке
  • Настройка включения/отключения ссылок в админке
1.5.2
01.09.2024
  • Улучшенная фильтрация коммитов только для собственнных коммитов пользователя
  • Использование параметра committer для оптимизации API запросов
  • Стабилизация кэширования на уровне 1 часа
  • Отображение коммитов других пользователей в репозитории
  • Нестабильное поведение кэширования
1.5.0
20.08.2024
  • Выбор тега заголовка в редакторе Gutenberg: H2, H3, H4 или текст без тега
  • Центрирование всех вариантов заголовков для эстетичной подачи
  • Настройка заголовка через интерфейс блока
1.4.0
10.08.2024
  • Поддержка шорткодов для классического редактора
  • Базовый шорткод

    Неверный формат профиля GitHub.

  • Совместимость с page builders (Elementor и др.)
  • Документация по использованию шорткодов
1.3.0
25.07.2024
  • Интерактивная диаграмма на базе Chart.js
  • Тепловая карта активности разработчика
  • Отображение активности по неделям
  • Цветовая градация интенсивности коммитов
  • Responsive дизайн для мобильных устройств
1.2.0
15.07.2024
  • Gutenberg блок для современного редактора WordPress
  • Интерфейс настройки блока в редакторе
  • Предпросмотр диаграммы в редакторе
  • Интеграция с WordPress Block API
1.1.0
05.07.2024
  • Система кэширования через WordPress transients
  • Кэширование данных коммитов на 1 час
  • Улучшенная обработка ошибок GitHub API
  • Валидация GitHub username
  • Защита от превышения лимитов API
1.0.0
25.06.2024
  • Первоначальный релиз плагина GitHub Commit Chart
  • Базовая функциональность отображения коммитов GitHub
  • Интеграция с GitHub REST API v3
  • Получение данных коммитов за год
  • Визуализация в виде столбчатой диаграммы
  • Подключение CSS и JavaScript ресурсов
  • Базовые настройки в админ-панели
  • Защита от прямого доступа и основные меры безопасности

Опубликовано

в

,

от

Метки:

Подпишитесь на новые посты, чтобы не пропускать их (РКН о сборе имейлов уведомлён должным образом):

Предыдущий пост
Владимир Бычко создал Bash-скрипт Speedi для проверки скорости интернета через…