1. Введение
1.1. Название проекта:
Плагин «Дата отправки+» для WordPress
1.3. Цель разработки
Создать плагин «Дата отправки+», который позволяет гибко настраивать и выводить на сайте сообщения с учётом расписания («дата отправки»), обеспечивая при этом интуитивно понятный UI и быстрый процесс настройки в админ‑части. Показ сообщения осуществляется по заданному расписанию, с возможностью автоматической подстановки ближайшей даты и дня недели доставки заказа в текст шорткода. Основная цель — информировать покупателя об актуальной (планируемой) дате доставки его заказа.
2. Общие требования
2.1. Совместимость
- WordPress: актуальные и рабочие версии (минимум 5.8+)
- PHP: 7.4 и выше
- MySQL: 5.6+
- MariaDB: 10+
2.2. Лицензирование и репозиторий
- Лицензия: GPLv2+
- Репозиторий: GitHub (или Bitbucket)
2.3. Уровень безопасности
- Все формы и AJAX‑запросы защищены nonce
- Проверка прав доступа (current_user_can) перед любыми изменениями
- Использование WP‑API ($wpdb, register_setting и т. д.), без прямого inline‑SQL
2.4. Локализация
- Поддерживаемые языки: uk_UK, ru_RU, en_US
- Использование функций __(), _e(), load_plugin_textdomain()
2.5. Код‑стайл и стандарты
- Соответствие WordPress Coding Standards
- PHPDoc‑комментарии для всех публичных функций и методов
3. Функциональные требования
3.1. Административный интерфейс
- Страница настроек плагина
- Меню: «Настройки → Дата отправки+»
- На странице — список созданных сущностей с кнопками «Редактировать», «Копировать шорткод», «Удалить»
- Кнопка «Добавить новую сущность»
- Форма создания/редактирования сущности
- Название сущности (строка, обязательное поле)
- Статус (select):
- Черновик
- На паузе
- Показывается
- Расписание показа:
- Чекбоксы для выбора дней недели (множественный выбор)
- Время показа: «от» (time picker) и «до» (time picker)
- Текст сообщения:
- Текстовое поле с визуальным редактором (TinyMCE) для форматирования (жирный, ссылки и т. д.)
- Включить ближайшую дату:
- Чекбокс «Показывать ближайшую дату в формате “1 января, понедельник”»
- Шорткод:
- Автоматически сгенерированный шорткод вида [date_send id=“123”]
- Если включена опция ближайшей даты, то после текста сообщения добавляет строку вида «1 января, понедельник», эта строка вычисляется из настроек Расписания показа, и содержит ближайшую в будущем Дату доставки.
- Кнопка «Скопировать в буфер обмена»
3.2. Пользовательская
- Настройки уведомлений (на странице «Настройки → Дата отправки+» в форме создания/редактирования сущности):
- Email для уведомлений (string, валидный адрес электронной почты)
- Телефон для уведомлений (string, формат +7XXXXXXXXXX или международный)
- Включить email-уведомления (checkbox) — отправлять письмо при наступлении новой запланированной даты показа шорткода
Логика уведомлений
- При наступлении очередной запланированной даты показа (день и время из раздела «Расписание показа») плагин должен автоматически сформировать и отправить уведомление:
- На email: информация о сущности (название, ID), состояние (черновик / пауза / активна), текст текущего сообщения, дата показа
- На телефон: (предполагается интеграция с Viber, Telegram) короткое сообщение вида «[Дата отправки+] Новая дата: 1 января — сообщение показано»
- Логирование уведомлений:
- Все отправленные email- и телефонные уведомления фиксируются в журнале логов
- Лог содержит: дату и время события, ID и название сущности, тип уведомления (email / Viber / Telegram), статус отправки (успешно / ошибка) часть (Frontend)
- Настройки уведомлений (на странице «Настройки → Дата отправки+» в форме создания/редактирования сущности):
- Email для уведомлений (string, валидный адрес электронной почты)
- Телефон для уведомлений (string, формат +7XXXXXXXXXX или международный)
- Включить email-уведомления (checkbox) — отправлять письмо при наступлении новой запланированной даты показа шорткода
- Включить уведомления на телефон (checkbox) — отправлять сообщение в чат Viber / Telegram при наступлении новой запланированной даты показа шорткода
Логика уведомлений
- При наступлении очередной запланированной даты показа (день и время из раздела «Расписание показа») плагин должен автоматически сформировать и отправить уведомление:
- На email: информация о сущности (название, ID), состояние (черновик / пауза / активна), текст текущего сообщения, дата показа
- На телефон: (предполагается интеграция с Viber, Telegram) короткое сообщение вида «[Дата отправки+] Новая дата: 1 января — сообщение показано»
3.3. Пользовательская часть (Frontend)
- Шорткод [date_send id=”…”]
- При выводе проверяет статус сущности и текущее время/день недели
- Если сейчас в пределах заданного расписания и статус = «Показывается», рендерит сообщение; иначе — ничего не выводит
- Внутри текста шорткода, если включена опция «Показывать ближайшую дату», автоматически подставляется ближайшая подходящая дата и день недели доставки
3.4. Вывод через хук
- Функция date_send_render( int $entity_id ) — универсальный метод для вывода сообщения сущности по ID из произвольного места кода темы или другого плагина. Функция учитывает все настройки: статус, расписание, текст сообщения и опцию ближайшей даты.
Action-хук do_action(‘date_send_render’, int $entity_id); — можно использовать для привязки вывода к любому событию WordPress. Например:
// Вывести сообщение с ID=123 в подвале сайта
add_action(‘wp_footer’, function() {
date_send_render(123);
});
- Фильтр apply_filters(‘date_send_render_output’, string $output, array $entity) — позволяет модифицировать финальный HTML до вывода, например, добавить обёртку или стили.
— (Frontend) (Frontend)
- Шорткод [date_send id=”…”]
- При выводе проверяет статус сущности и текущее время/день недели
- Если сейчас в пределах заданного расписания и статус = «Показывается», рендерит сообщение; иначе — ничего не выводит
- Внутри текста шорткода, если включена опция «Показывать ближайшую дату», автоматически подставляется ближайшая подходящая дата и день недели доставки
4. Нефункциональные требования
4.1. Производительность
- Получение и проверка сущности не дольше 100 мс
- Возможность кеширования результатов через Transient API
4.2. Безопасность
- Валидация и санитизация всех вводимых данных (sanitize_text_field, wp_kses_post для HTML)
- Проверка прав пользователя (manage_options) для доступа к настройкам
4.3. Кроссбраузерность и адаптивность
- Админ‑панель корректно отображается в последних версиях Chrome, Firefox, Edge
- UI‑элементы (чекбоксы, тайм‑пикеры) адаптивны и touch‑friendly
4.4. Совместимость с темами и плагинами
- Не конфликтует со стандартной темой Twenty Twenty‑Three
- Стилевая изоляция через собственный префикс классов, минимально влияет на CSS темы и плагинов
5. Тестирование и приёмка
5.1. Модульное тестирование
- PHPUnit для бизнес‑логики (валидация, расчёт ближайшей даты)
5.2. Интеграционное тестирование
- WP‑CLI или WP Test для проверки CRUD‑операций в админке
- Тесты шорткода в разных временных условиях
5.3. Критерии приёмки
- Все баги уровня P1/P2 закрыты
- Функциональные тесты проходят без ошибок
- Плагин устанавливается, активируется и деактивируется без ошибок и предупреждений
6. Документация
- Для пользователя:
- Установка и активация
- Создание/редактирование сущностей, примеры использования шорткода
- Для разработчика:
- Структура файлов и классов
- Описание хуков, фильтров и точек расширения