WP PWA Generator — превращает сайт в приложение

Плагин для WordPress

WP PWA Generator — плагин для WordPress, который превращает сайт в устанавливаемое приложение и собирает его в отдельную папку на этом же сайте. Без composer, без npm, без чужих библиотек и без внешних сервисов.

Скачать версию 0.2.0

zip, 515,7 КБ · GPL-2.0-or-later · PHP 7.4+ · WordPress 5.8+

Сайт на ноутбуке превращается в приложение с иконкой на домашнем экране телефона

Зачем он нужен

Ваш сайт на WordPress уже есть. Приложения у него нет — а посетитель хочет поставить иконку на домашний экран, открывать её без адресной строки и читать вас в метро.

Сделать это руками — значит написать манифест, написать service worker, нарезать полтора десятка иконок под все платформы и собрать оболочку приложения. Владелец сайта этого не умеет и не должен уметь.

Плагин делает это сам. После активации в админке появляется раздел PWA с девятью вкладками настроек. Плагин создаёт на сайте папку — по умолчанию ваш-сайт.ru/app/, а если в корень писать нельзя, wp-content/uploads/pwa-app/ — и кладёт туда самостоятельное приложение: index.html, service worker, manifest.webmanifest, полный набор иконок и splash-экранов, стили и скрипты. Содержимое приложение берёт с этого же сайта через WP REST API.

Посетитель заходит на ваш-сайт.ru/app/, браузер предлагает установить, иконка появляется на домашнем экране.

Первое приложение появляется само

Сразу после активации плагин собирает приложение на умолчаниях: имя и описание — из настроек сайта, иконка — из логотипа сайта или нарисованная из первой буквы названия. Вы открываете админку и обнаруживаете работающее приложение, а не пустой экран с кнопкой. Кнопка «Собрать приложение» нужна для пересборки после правок.

Что получает посетитель

  • Лента материалов сайта с подгрузкой по мере прокрутки.
  • Экран материала: заголовок, картинка, текст, автор, дата, рубрики.
  • Выбранные вами страницы сайта в меню приложения.
  • Поиск по сайту, рубрики и метки как фильтр ленты.
  • Чтение офлайн: то, что уже открывалось, открывается без сети.
  • Понятный экран «Нет сети» вместо белого пятна.
  • Приглашение установить приложение — кнопка на Android и на компьютере, подсказка «Поделиться → На экран „Домой“» на iPhone и iPad.
  • Приватный и парольный контент посетителю не показывается: приложение берёт только то, что REST отдаёт неавторизованному гостю.

Шесть возможностей, которые включаются галочкой

Все выключены по умолчанию. Выключенная возможность не грузит в приложение ни байта своего кода.

  • Уведомления

    Web Push на ваших собственных ключах VAPID. Без Firebase, без посредников, без чужого аккаунта. Форма отправки, автоотправка при выходе новой записи, отчёт «доставлено / отказано / протухло», очередь партиями, центр уведомлений внутри приложения.

  • Расширенный офлайн

    Стратегия и срок хранения на каждый вид ресурса, лимиты по числу файлов и по объёму, список адресов для предзагрузки, кнопка «Сохранить для чтения» у материала и раздел «Сохранённое» в приложении.

  • Биометрия

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

  • Геолокация и карты

    Раздел «Рядом» — материалы, отсортированные по расстоянию; карта на тайлах OpenStreetMap, без ключей и платных сервисов; поля широты и долготы в редакторе записи.

  • Отложенные действия

    Действие, сделанное без сети, кладётся в очередь на устройстве и уезжает, когда сеть появится. Один раз, а не дважды.

  • Иконка нейросетью свой ключ

    Опишите иконку словами — её нарисуют. Нужен свой ключ, платный; всё остальное в плагине работает без него.

Как рассказать посетителям, что приложение есть

Раздел «Продвижение» — пять способов, и все выключены по умолчанию. Плагин ничего не создаёт и не публикует сам: страница и запись появляются по вашей кнопке и остаются черновиками, пока вы их не опубликуете.

  • Блок в любое место сайта — кнопка установки и инструкции для iPhone, Android и компьютера. Шорткодом

    Приложение этого сайта

    Поставьте его на домашний экран: материалы открываются быстрее и читаются даже без интернета.

    Открыть приложение

    QR-код на приложение сайта
    Наведите камеру телефона на этот код.

    Как поставить приложение на своё устройство

    iPhone и iPad
    1. Откройте приложение в Safari по кнопке выше.
    2. Нажмите «Поделиться» — квадрат со стрелкой вверх, внизу экрана.
    3. Пролистайте список вниз и выберите «На экран „Домой“».
    4. Нажмите «Добавить» справа вверху — значок появится рядом с остальными.

    На iPhone это умеет только Safari: в других браузерах пункта «На экран „Домой“» не будет.

    Android
    1. Откройте приложение в Chrome по кнопке выше.
    2. Нажмите кнопку с тремя точками справа вверху.
    3. Выберите «Установить приложение» или «Добавить на главный экран».
    4. Подтвердите «Установить».

    Часто Chrome предлагает установку сам — полоской внизу экрана. Нажать её достаточно, остальные шаги тогда не нужны.

    Компьютер и ноутбук
    1. Откройте приложение в Chrome или Edge по кнопке выше.
    2. Справа в адресной строке появится значок установки — монитор со стрелкой вниз.
    3. Нажмите его и подтвердите «Установить».
    4. Приложение откроется своим окном, без адресной строки и вкладок.

    Значка не видно — откройте меню браузера и найдите там пункт «Установить». В Safari на Mac это меню «Файл» → «Добавить в Dock».

    или блоком редактора.
  • Готовая страница «Как установить приложение» — создаётся по кнопке, черновиком.
  • Черновик новости-анонса с готовым текстом: публикуете вы, а не плагин.
  • QR-код на приложение — для случая «читаю с компьютера, а ставить надо на телефон». Рисуется на вашем же сайте, без обращения к чужим сервисам.
  • Пункт меню, ведущий на приложение.

Созданные страница и запись остаются на сайте после удаления плагина: это содержимое вашего сайта, а не плагина.

Иконки

Загрузите свою картинку — из неё сами нарежутся все размеры, которых требуют платформы:

  • 48
  • 72
  • 96
  • 128
  • 144
  • 152
  • 167
  • 180
  • 192
  • 256
  • 384
  • 512
  • maskable
  • apple-touch
  • favicon

И девять splash-экранов под актуальные экраны iPhone и iPad.

Картинки нет — плагин нарисует иконку сам: из логотипа сайта, а если и его нет — из первой буквы названия на фоне вашего фирменного цвета. Предпросмотр показывает, как иконка будет выглядеть круглой, квадратной и maskable с безопасной зоной, — до сборки, а не после.

Ни одной зависимости

В плагине нет composer, нет npm, нет vendor/, нет node_modules/, нет ни одного обращения к CDN и ни одной чужой JavaScript-библиотеки в собранном приложении. Всё построено на функциях самого PHP и API WordPress.

Это не экономия, а решение. Composer есть далеко не на всяком хостинге, а плагин должен работать на любом. Сборщик нельзя запустить на вашем хостинге — значит его не должно быть вообще: файлы, которые лежат в архиве, это ровно те файлы, которые поедут на сайт. И каждая внешняя библиотека — это чужой код, который поехал бы в приложение на вашем сайте.

Что нужно от сервера

Таблица прокручивается вбок.

Требование Зачем Если нет
PHP 7.4 и новее сам плагин плагин не активируется
WordPress 5.8 и новее WP_Filesystem, редактор изображений, REST плагин не активируется
HTTPS без него браузер не установит приложение и не включит service worker сборка заблокирована, на вкладке «Состояние» красная строка
GD или Imagick нарезка иконок и splash-экранов иконки не нарежутся, сборка останавливается
openssl уведомления и вход по ключу недоступны эти две возможности, остальное приложение работает
право записи в корень сайта или в wp-content/uploads/ папка приложения собрать некуда, об этом сказано на вкладке «Состояние»

Ничего из этого плагин не проверяет «на глазок»: все шесть проверок — отдельные строки на вкладке «Состояние», словами, а не кодами ошибок.

Ваши данные остаются вашими

Плагин не отправляет никуда ни статистику, ни содержимое сайта. Единственный внешний сервис за весь проект — рисование иконки нейросетью, и оно выключено по умолчанию, работает по вашему ключу и только по нажатию кнопки.

Ключ и приватный ключ уведомлений хранятся в базе вашего сайта, не грузятся на каждом запросе, в интерфейсе замаскированы, в экспорт настроек не попадают и в собранное приложение не попадают: сборка останавливается, если ключ вдруг оказался в файле, который вот-вот запишется в открытую папку.

Установка

  1. Скачайте архив — кнопка в начале страницы и внизу.
  2. В админке своего сайта: Плагины → Добавить новый → Загрузить плагин, выберите скачанный zip, нажмите Установить.
  3. Нажмите Активировать. Ничего больше делать не нужно: ни composer install, ни npm install, ни сборки.
  4. Плагин соберёт первое приложение сам. Откройте PWA → Состояние — там ссылка на него.
  5. Пройдите вкладки Основное, Внешний вид, Иконка и Контент, поправьте что хотите и нажмите Собрать приложение.

Если сборка не удалась, на вкладке «Состояние» написано, на каком из семи шагов и почему.

Обновления

Новые версии выкладываются здесь же, на этой странице. Плагин узнаёт о них сам и показывает обычное «Доступно обновление» на экране Плагины вашего сайта — обновление ставится вашей кнопкой, обычным механизмом WordPress. Никакого своего установщика в плагине нет.

Что при этом происходит и чего не происходит:

  • раз в двенадцать часов плагин скачивает с этого сайта маленький файл с номером последней версии. Это обычное скачивание файла: ни адреса вашего сайта, ни статистики, ни ключей в запросе нет;
  • файл и архив принимаются только по https. По http обновление не скачивается вовсе — это исполняемый код, и подменить его по дороге не должно быть возможно;
  • ответ проверяется: не тот формат, чужой плагин, версия не выше вашей — обновление не предлагается;
  • проверку можно выключить: PWA → Дополнительно → «Проверять обновления плагина». Тогда плагин не спрашивает ни о чём и никого.

Адрес, откуда берутся обновления, виден на вкладке PWA → Состояние, вместе с датой последней проверки и тем, что ответил сервер. По умолчанию это https://cmediatech.ru/PWA/wp-pwa-generator.json. Если вы держите свою копию раздачи, адрес задаётся строкой в wp-config.php:

define( 'WPPWA_UPDATE_URL', 'https://ваш-сайт.ru/plugin/wp-pwa-generator.json' );

Константа сильнее настройки, настройка сильнее умолчания.

Удаление

По умолчанию удаление плагина ничего не уносит: ни настройки, ни подписки, ни собранную папку. Если хотите, чтобы уносило, включите Дополнительно → «Удалить все данные при удалении плагина» до того, как удалите плагин.

Чего плагин не делает

  • не превращает сам сайт в PWA — приложение живёт в отдельной папке, тема сайта не трогается;
  • не заменяет магазин приложений: это web-приложение, а не сборка для App Store или Google Play;
  • не пишет ничего в чужие плагины и не требует ни одного внешнего сервиса для работы.

Лицензия и поддержка

Автор — Александр Холодов. GPL-2.0-or-later: исходный код открыт, зависимостей нет, весь код в архиве — тот же, что работает у вас на сайте.

WP PWA Generator

Скачать версию 0.2.0

515,7 КБ · требуется PHP 7.4 и WordPress 5.8

Другой плагин автора — Cookie Consent Mascot: согласие на cookie с персонажем, который не пускает счётчики до нажатия «Разрешаю». Весь список — на странице Плагины.