Woo Review Media 操作マニュアル
プラグインのインストール
- 管理画面のプラグイン > 新規追加をクリック
- プラグインのアップロードをクリックし、 ZIP ファイルを選択
- 今すぐインストールをクリックし、インストール完了後に有効化ボタンを押します
※一般的なプラグインのインストールと同じです。
プラグインの詳細設定
管理画面の設定 > 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_size
・max_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 を推奨します。