1. Введение

1.1. Название проекта:

Плагин «Дата отправки+» для WordPress

1.3. Цель разработки
Создать плагин «Дата отправки+», который позволяет гибко настраивать и выводить на сайте сообщения с учётом расписания («дата отправки»), обеспечивая при этом интуитивно понятный UI и быстрый процесс настройки в админ‑части. Показ сообщения осуществляется по заданному расписанию, с возможностью автоматической подстановки ближайшей даты и дня недели доставки заказа в текст шорткода. Основная цель — информировать покупателя об актуальной (планируемой) дате доставки его заказа.

2. Общие требования

2.1. Совместимость

  • Word­Press: актуальные и рабочие версии (минимум 5.8+) 
  • PHP: 7.4 и выше 
  • MySQL: 5.6+ 
  • Mari­aDB: 10+ 

2.2. Лицензирование и репозиторий

  • Лицензия: GPLv2+ 
  • Репозиторий: GitHub (или Bit­buck­et) 

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. Код‑стайл и стандарты

  • Соответствие Word­Press Cod­ing Stan­dards 
  • PHPDoc‑комментарии для всех публичных функций и методов 

3. Функциональные требования

3.1. Административный интерфейс

  • Страница настроек плагина 
    1. Меню: «Настройки → Дата отправки+» 
    2. На странице — список созданных сущностей с кнопками «Редактировать», «Копировать шорткод», «Удалить» 
    3. Кнопка «Добавить новую сущность» 
  • Форма создания/редактирования сущности 
    1. Название сущности (строка, обязательное поле) 
    2. Статус (select): 
      • Черновик 
      • На паузе 
      • Показывается 
    3. Расписание показа: 
      • Чекбоксы для выбора дней недели (множественный выбор) 
      • Время показа: «от» (time pick­er) и «до» (time pick­er) 
    4. Текст сообщения: 
      • Текстовое поле с визуальным редактором (TinyM­CE) для форматирования (жирный, ссылки и т. д.) 
    5. Включить ближайшую дату: 
      • Чекбокс «Показывать ближайшую дату в формате “1 января, понедельник”» 
    6. Шорткод: 
      • Автоматически сгенерированный шорткод вида [date_send id=“123”] 
      • Если включена опция ближайшей даты, то после текста сообщения добавляет строку вида «1 января, понедельник», эта строка вычисляется из настроек Расписания показа, и содержит ближайшую в будущем Дату доставки. 
      • Кнопка «Скопировать в буфер обмена» 

3.2. Пользовательская

  • Настройки уведомлений (на странице «Настройки → Дата отправки+» в форме создания/редактирования сущности): 
    1. Email для уведомлений (string, валидный адрес электронной почты) 
    2. Телефон для уведомлений (string, формат +7XXXXXXXXXX или международный) 
    3. Включить email-уведомления (check­box) — отправлять письмо при наступлении новой запланированной даты показа шорткода 

Логика уведомлений

  • При наступлении очередной запланированной даты показа (день и время из раздела «Расписание показа») плагин должен автоматически сформировать и отправить уведомление: 
    1. На email: информация о сущности (название, ID), состояние (черновик / пауза / активна), текст текущего сообщения, дата показа 
    2. На телефон: (предполагается интеграция с Viber, Telegram) короткое сообщение вида «[Дата отправки+] Новая дата: 1 января — сообщение показано» 
  • Логирование уведомлений: 
    1. Все отправленные email- и телефонные уведомления фиксируются в журнале логов 
    2. Лог содержит: дату и время события, ID и название сущности, тип уведомления (email / Viber / Telegram), статус отправки (успешно / ошибка) часть (Fron­tend) 
  • Настройки уведомлений (на странице «Настройки → Дата отправки+» в форме создания/редактирования сущности): 
    1. Email для уведомлений (string, валидный адрес электронной почты) 
    2. Телефон для уведомлений (string, формат +7XXXXXXXXXX или международный) 
    3. Включить email-уведомления (check­box) — отправлять письмо при наступлении новой запланированной даты показа шорткода 
    4. Включить уведомления на телефон (check­box) — отправлять сообщение в чат 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); — можно использовать для привязки вывода к любому событию Word­Press. Например:

// Вывести сообщение с ID=123 в подвале сайта

add_action(‘wp_footer’, func­tion() {

    date_send_render(123);

});

  • Фильтр apply_filters(‘date_send_render_output’, string $out­put, array $enti­ty) — позволяет модифицировать финальный HTML до вывода, например, добавить обёртку или стили. 

— (Fron­tend) (Fron­tend)

  • Шорткод [date_send id=”…”] 
    • При выводе проверяет статус сущности и текущее время/день недели 
    • Если сейчас в пределах заданного расписания и статус = «Показывается», рендерит сообщение; иначе — ничего не выводит 
    • Внутри текста шорткода, если включена опция «Показывать ближайшую дату», автоматически подставляется ближайшая подходящая дата и день недели доставки 

4. Нефункциональные требования

4.1. Производительность

  • Получение и проверка сущности не дольше 100 мс 
  • Возможность кеширования результатов через Tran­sient API 

4.2. Безопасность

  • Валидация и санитизация всех вводимых данных (sanitize_text_field, wp_kses_post для HTML) 
  • Проверка прав пользователя (manage_options) для доступа к настройкам 

4.3. Кроссбраузерность и адаптивность

  • Админ‑панель корректно отображается в последних версиях Chrome, Fire­fox, Edge 
  • UI‑элементы (чекбоксы, тайм‑пикеры) адаптивны и touch‑friendly 

4.4. Совместимость с темами и плагинами

  • Не конфликтует со стандартной темой Twen­ty Twenty‑Three 
  • Стилевая изоляция через собственный префикс классов, минимально влияет на CSS темы и плагинов 

5. Тестирование и приёмка

5.1. Модульное тестирование

  • PHPUnit для бизнес‑логики (валидация, расчёт ближайшей даты) 

5.2. Интеграционное тестирование

  • WP‑CLI или WP Test для проверки CRUD‑операций в админке 
  • Тесты шорткода в разных временных условиях 

5.3. Критерии приёмки

  • Все баги уровня P1/P2 закрыты 
  • Функциональные тесты проходят без ошибок 
  • Плагин устанавливается, активируется и деактивируется без ошибок и предупреждений 

6. Документация

  • Для пользователя: 
    • Установка и активация 
    • Создание/редактирование сущностей, примеры использования шорткода 
  • Для разработчика: 
    • Структура файлов и классов 
    • Описание хуков, фильтров и точек расширения 
Updating
  • У кошику немає товарів.