WP Manifestindependent plugin directory
manifest / media / ed-yandex-s3-media

ED Yandex S3 Media

WordPress‑плагин для оффлоада загрузок медиабиблиотеки в Yandex Cloud Object Storage

by Ed Shpigel · github.com/edshpigel/ed-yandex-s3-media · website

0stars
0forks

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/edshpigel/ed-yandex-s3-media/archive/refs/heads/main.zip

WordPress‑плагин для оффлоада загрузок медиабиблиотеки в Yandex Cloud Object Storage (S3‑совместимый API) с подписью AWS Signature Version 4.

  • Автор: Ed Shpigel — https://t.me/edshpigel
  • Версия: 0.1.0

Возможности

  • Загрузка в S3: автоматически выгружает оригинальный файл и все сгенерированные размеры изображений.
  • Подмена URL: ссылки на вложения и миниатюры начинают указывать на Object Storage.
  • Проверка доступа: кнопка Test connection выполняет подписанный запрос к бакету.
  • Опции:
    • Prefix для хранения в “папке” внутри бакета
    • ACL public-read (опционально)
    • удаление локальных файлов после успешной загрузки (опционально)
    • debug‑лог в error_log (опционально)

Установка

  1. Скопируйте папку плагина в:
    • wp-content/plugins/ed-yandex-s3-media/
  2. Активируйте плагин в админке WordPress → Плагины.

Настройка

Откройте Настройки → Yandex S3 Media и заполните:

  • AWS_KEY_ID (key_id): идентификатор статического ключа доступа
  • AWS_SECRET_KEY (secret): секретный ключ
  • Bucket: имя бакета
  • Region: по умолчанию ru-central1
  • Endpoint: обычно https://storage.yandexcloud.net
  • Base URL: используется для формирования публичных URL (обычно тот же https://storage.yandexcloud.net)
  • Prefix (опционально): например uploads (будет добавлен перед путём из wp-content/uploads)
  • ACL public-read: включайте только если хотите публичную раздачу файлов без подписи
  • Удалять локальные файлы: включайте только если уверены, что весь медиаконтент должен храниться только в S3
  • Debug log: пишет сообщения в error_log

Далее нажмите Test connection, и после успешной проверки включите “Включить оффлоад”.

Как это работает

Загрузка

Плагин использует хук wp_update_attachment_metadata и после генерации метаданных:

  • выгружает оригинальный файл
  • выгружает все размеры из metadata['sizes'] (thumbnail/medium/large и т.д.)
  • сохраняет в метаданные вложения:
    • _ed_yandex_s3_media_offloaded = 1
    • _ed_yandex_s3_media_bucket = <bucket>
    • _ed_yandex_s3_media_keys = массив ключей (original + sizes)

Подмена URL

  • wp_get_attachment_url — подменяет URL оригинала
  • image_downsize — подменяет URL конкретного размера изображения

Удаление

При удалении вложения (delete_attachment) плагин пытается удалить объект(ы) из бакета (DELETE Object).

Важные нюансы

  • Бакет с точками в имени (например example.ru): для HTTPS рекомендуется path‑style URL
    • т.е. https://storage.yandexcloud.net/<bucket>/<key> — именно так формирует URL этот плагин.
  • Публичность:
    • если выключен public-read, браузер не сможет скачать файл напрямую без подписи/прокси — используйте public-read, либо расширяйте плагин (например, на presigned URLs).
  • Delete local:
    • если включить удаление локальных файлов, WordPress больше не будет иметь файлы на диске (кроме БД/метаданных), что влияет на плагины, которые ожидают локальные пути.

Лицензия

GPL-2.0-or-later — см. файл LICENSE.txt.