Woo Review Media 操作マニュアル


プラグインのインストール

  1. 管理画面のプラグイン > 新規追加をクリック
  2. プラグインのアップロードをクリックし、 ZIP ファイルを選択
  3. 今すぐインストールをクリックし、インストール完了後に有効化ボタンを押します

※一般的なプラグインのインストールと同じです。

プラグインの詳細設定

管理画面の設定 > Woo Review Media より、以下の各項目を設定します。

Woo Review Media 設定画面

各項目の設定

[1] 許可する MIME タイプ

アップロードできるデータ形式をチェックします。サーバー側でも finfo で厳密に検証します。

  • JPEG image/jpeg
  • PNG image/png
  • WebP image/webp
  • GIF image/gif
  • MP4 video/mp4
  • MOV video/quicktime
  • WebM video/webm

[2] 最大ファイル数

ひとつのレビューで添付できるファイル数を設定します。最大 10 点のアップロードが可能で上限超過はクライアント/サーバーの両方で弾かれます。

[3] 画像の最大サイズ

1 ファイルあたりの上限(MB)です。クライアントでのチェックに加え、サーバー側でもサイズ超過を拒否します。

[4] 動画の最大サイズ(MB)

動画を許可している場合の 1 ファイル上限(MB)です。画像と同様に二重チェックされます。

[5] レビュ―タブを先頭に表示

商品ページのタブは通常説明「説明」が表示されますが、承認済みレビューがある場合はレビュータグを初期表示します。
SEO と CVR の観点でレビューの視認性を高めたい場合に有効です

[6] 表示モード

カード(インライン):コメントスペースに幅 100%でそのまま表示。
モーダル:サムネイルをクリック/タップで拡大。モバイルは画面いっぱいに表示し、モバイルは左右スワイプで前後移動できます。

[7] ゲストの画像アップロード

WooCommerce 側で「ゲストレビューを許可」している場合に限り、未ログインのユーザーにも添付を許可します。
不許可にすると、未ログイン時は添付 UI が表示されません。
画面下の「サイトステータス」では、 WooCommerce のレビュー投稿設定を確認できます。

特記事項

動画の投稿について

本プラグインは動画の添付も可能ですが、大容量の動画はアップロード失敗・表示遅延・サーバー負荷の増加につながる場合があります。
本来、容量の大きい動画は圧縮を行うべきですが、動画の圧縮・変換(トランスコード)はサーバー側で行う性質の処理であり、プラグインの範囲外です。
そのため、動画投稿は補助的な機能として位置づけています。

技術情報

セキュリティ・運用

  • nonce 検証:check_ajax_referer('wrm_upload','nonce')
  • ログイン/ゲスト制御:設定でゲスト拒否時は未ログインからの添付を不許可(フロント/サーバ両面)
  • MIME 厳格化:設定値の正規化+ finfo による実ファイル判定(拡張子偽装を防止)
  • 上限 enforce:件数(max_files)/容量(max_sizemax_video_size)をサーバ側でも拒否
  • クリーンアップ:wrm_tmp_cleanup_event(週次)で孤立ファイル掃除
  • 物理削除連動:コメントの完全削除時に添付ディレクトリも物理削除

IP レート制限(未ログインのみ)

  • 対象:未ログインユーザー(ログイン済みは対象外)
  • 単位:IP アドレスごと
  • 検査対象:wrm_upload_image へのアップロードリクエスト
  • 既定値:60 秒あたり最大 2 回、かつ 10 分あたり最大 6 回
  • 超過時:HTTP 429 を返し、メッセージ「コメントを急いで投稿し過ぎているようです。もう少しゆっくりお願いします。」を表示
  • 解除:時間窓の経過で自動解除(手動解除 UI なし)

保存場所(ファイルシステム)

  • 保存先ディレクトリ:wp-content/uploads/wrm/YYYY/MM/tmp/
  • アップロード直後は tmp に配置し、サニタイズ完了ファイルのみ採用
  • 未参照の一時ファイルは WP-Cron によるクリーンアップで定期削除

保存先(データ)

  • レビュー添付メディア情報はコメントメタに配列保存(URL/bytes/MIME など)
  • プラグイン設定はオプション wrm_settings に保存

保存形式(例)

[
  {
    "url": "https://example.com/wp-content/uploads/wrm/2025/08/tmp/8MGXb2wp-image01.jpg",
    "bytes": 159253,
    "mime": "image/jpeg"
  },
  {
    "url": "https://example.com/wp-content/uploads/wrm/2025/08/tmp/KrVfB1Yo-image02.jpg",
    "bytes": 143002,
    "mime": "image/png"
  }
]

アップロード API(AJAX)

  • エンドポイント:admin-ajax.php?action=wrm_upload_image
  • Nonce:wrm_upload
  • 入力:images[](multipart/form-data)
  • 出力:{ success:true, data:{ files:[{ name,tmp_url,tmp_path,bytes,mime }] } }
  • 安全策:finfo による実 MIME 判定/許可拡張子・サイズ・枚数チェック/ファイル名の正規化/move_uploaded_file() 使用

サニタイズ処理

  • wrm_sanitize_image($dest) を保存直後に実行
  • EXIF Orientation 反映(自動回転)
  • 画像サイズ長辺 1280px へ縮小(超過時のみ・比率維持)
  • メタ削除:EXIF/IPTC/XMP/コメント
  • 成功時は変換結果で元ファイル置換

実行エンジン(Imagick/GD)

  • Imagick があれば優先使用、無ければ GD へ自動フォールバック(設定不要)
  • 両経路で EXIF/IPTC/XMP の除去と再エンコードを保証
  • 差分:Imagick は ICC 再適用が可能/GD は原則 ICC を保持しない
  • GD 経路では JPEG コメント(例:CREATOR: gd-jpeg …)が付く場合あり(実害は低)

レート制限(スパム対策)

  • 未ログインユーザーに対し IP 単位の送信間隔制限を実施

ログ

wp-config.php でログの出力設定が行えます。

define('WRM_DEBUG', true);
define('WRM_DEBUG_VERBOSE', true);

  • エラー出力
  • 必要時のみ詳細デバッグを有効化

ファイル構成(代表)

woo-review-media/
├── woo_review_media.php            … メインプラグイン
├── includes/
│   ├── setup.php                   … 初期化・読み込み・ i18n
│   ├── settings.php                … 設定画面(General)
│   ├── ajax.php                    … AJAX アップロード(wrm_upload_image)
│   ├── image_sanitize.php          … 画像サニタイズ(Imagick/GD)
│   ├── review-modal-display.php    … モーダル表示テンプレート
│   ├── review-custom-display.php   … カード(インライン)表示テンプレート
│   ├── admin.php                   … 管理画面メタボックス(添付一覧/削除)
│   ├── cleanup.php                 … 一時ファイルの定期清掃(WP-Cron)
│   └── normalize-allowed-types.php … MIME 正規化ヘルパ
├── assets/
│   ├── js/media-upload.js          … 事前アップロード/検証/プレビュー
│   ├── js/review-modal.js          … モーダル(キーボード/スワイプ/ナビ)
│   └── css/wrm-modal.css           … モーダルのスタイル
└── languages/
    ├── woo-review-media-ja.po
    └── woo-review-media-ja.mo

よくあるご質問:機能・仕様について

ゲスト(未ログイン)でも画像を添付できますか?

WooCommerce 側でゲストレビューを許可している場合は設定で有効化可能。未ログイン時はレート制限を適用します。

画像をクリックすると拡大されますか?モバイルの操作性は?

表示モードが「モーダル」の場合、クリック/タップで拡大。モバイルは全画面・黒背景で、左右スワイプ・矢印・ Esc に対応します。

動画はどのくらいまでアップできますか?

基本的に管理画面で任意設定可能ですが、短い低容量(50MB 以下)を推奨します。

サーバー容量はどれくらい必要ですか?

添付枚数・サイズ設定によりますが、画像中心であれば大きな負荷はかかりません。

画像のメタ情報(EXIF/IPTC/XMP)は本当に消えますか?

はい。アップロード直後に再エンコードし、 EXIF/IPTC/XMP/コメントを削除します。

サーバーに Imagick がなくても動きますか?

はい。自動的に GD に切り替わります。公開上の安全性は両経路で確保されます。色再現の厳密さ(ICC 維持)が必要な場合は Imagick を推奨します。