最後更新:2026/10/25
在台灣的網店買東西,很多客人會先往下滑看評價。評價寫「質感很好」五顆星,大家半信半疑;同樣的評價旁邊多一張客人自己拍的照片,標著「已購買」,可信度就完全不一樣。
WooCommerce 的評價功能,有一半不用寫程式:只讓買過的人寫、標示「已購買」、星等必填,後台勾一勾就有。附照片的功能內建沒有,這篇用一段程式碼補上,最後再說明商店頁怎麼顯示星等。
不想自己改?把這篇交給 AI
把這篇的網址(或全文)連同下面這段話貼給 AI:
我的網站是 WordPress,有裝 WooCommerce。我想照下面這篇文章,讓商品評價只給買過的人寫,並且可以附一張照片。
請先問我:照片大小上限要多少、要不要先審核才顯示、我的佈景主題是傳統主題還是區塊主題。
問清楚之後,再一步一步告訴我:後台要勾哪些設定、要用哪一段程式碼、貼在哪裡,以及改完怎麼測試。
如果文章的做法不適合我的網站,請直接告訴我原因和替代做法。
文章:(貼上這篇的網址,或整篇內容)
改之前先備份,密碼不要貼給 AI。
第一步:後台設定,只讓買過的人寫
到「WooCommerce > 設定 > 商品」,在「商品評價」那一區勾選:
「啟用商品評論」、「在顧客的評價中顯示 “已驗證” 標籤」、「只有 “通過驗證的會員” 才能參與評論」;下面的「商品評分」再勾「在評論裡啟用星評」和「星評是必填的」。
勾好之後,沒買過的人在商品頁會看到「只有註冊並且購買過商品的顧客才能撰寫評價。」,評價表單不會出現;買過的會員寫的評價,名字旁邊會標「(已購買)」。就算有人想繞過表單直接送出,WooCommerce 也會擋下來,顯示「只有 “通過驗證的會員” 才能參與評論」。
另外看一下「設定 > 討論」的「留言者必須曾發佈留言且留言已通過審核」。這一項預設是勾的,所以每位客人的第一則評價,要你在後台「商品 > 商品評價」核准之後才會顯示;之後同一位客人再寫,就會直接出現。想每一則都先看過,可以改勾「留言必須由相關站務人員手動核准」。
第二步:讓評價可以附照片
// 第 115 篇:WooCommerce 商品評價:買過的人才能寫,還能附一張照片
// 1. 評價表單多一個「附上照片」欄位
add_filter('woocommerce_product_review_comment_form_args', function ($args) {
$args['comment_field'] .= '<p class="comment-form-mimi-photo"><label for="mimi_review_photo">附上照片(選填,JPG、PNG 或 WebP,3 MB 以內)</label>'
. '<input type="file" id="mimi_review_photo" name="mimi_review_photo" accept="image/jpeg,image/png,image/webp"></p>';
return $args;
});
// 2. 評價表單預設不能夾帶檔案,在商品頁把表單改成可以傳檔案
add_action('wp_footer', function () {
if (function_exists('is_product') && is_product()) {
echo "<script>document.querySelectorAll('#review_form form, form#commentform').forEach(function (f) { f.enctype = 'multipart/form-data'; });</script>";
}
});
// 3. 送出評價時,確認是買過這件商品的會員、檔案是真的圖片,再存進媒體庫
add_action('comment_post', function ($comment_id, $approved, $data) {
$product_id = (int) $data['comment_post_ID'];
$user_id = (int) ($data['user_id'] ?? 0);
if (get_post_type($product_id) !== 'product' || empty($_FILES['mimi_review_photo']['name']) || $approved === 'spam') {
return;
}
if (!$user_id || !wc_customer_bought_product('', $user_id, $product_id)) {
return; // 沒買過、沒登入,不收照片
}
$file = $_FILES['mimi_review_photo'];
$mimes = ['jpg|jpeg' => 'image/jpeg', 'png' => 'image/png', 'webp' => 'image/webp'];
$check = wp_check_filetype_and_ext($file['tmp_name'], $file['name'], $mimes);
if ($file['error'] !== UPLOAD_ERR_OK || $file['size'] > 3 * MB_IN_BYTES || empty($check['type'])) {
return;
}
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/media.php';
require_once ABSPATH . 'wp-admin/includes/image.php';
$att = media_handle_upload('mimi_review_photo', $product_id, ['post_title' => '評價照片'], ['test_form' => false, 'mimes' => $mimes]);
if (!is_wp_error($att)) {
update_comment_meta($comment_id, 'mimi_review_photo', $att);
}
}, 20, 3);
// 4. 評價內容下面顯示照片(小圖,點了開大圖;大圖是重新產生的尺寸,不帶手機拍照的位置資訊)
add_filter('comment_text', function ($text, $comment = null) {
if (!$comment || get_post_type($comment->comment_post_ID) !== 'product') {
return $text;
}
$att = (int) get_comment_meta($comment->comment_ID, 'mimi_review_photo', true);
if ($att) {
$text .= sprintf(
'<p class="mimi-review-photo"><a href="%s" target="_blank" rel="noopener">%s</a></p>',
esc_url(wp_get_attachment_image_url($att, 'large')),
wp_get_attachment_image($att, 'thumbnail', false, ['alt' => '顧客評價照片', 'loading' => 'lazy'])
);
}
return $text;
}, 10, 2);
// 5. 評價刪掉的時候,照片也一起從媒體庫刪掉
add_action('delete_comment', function ($comment_id) {
$att = (int) get_comment_meta($comment_id, 'mimi_review_photo', true);
if ($att) {
wp_delete_attachment($att, true);
}
});
程式碼放在 Code Snippets 這類外掛或子主題,放法和備份方式見〈WooCommerce 結帳頁改成台灣習慣〉。
五段各做了什麼
第 1 段在評價表單的「你的評價」下面,多一個上傳照片的欄位,說明寫清楚可以傳的格式和大小,選擇檔案時也只會列出 JPG、PNG、WebP 圖片。
第 2 段是一個小地方,卻少不了。網頁的表單預設不能夾帶檔案,WordPress 的評價表單也沒有提供設定,所以用一行程式在商品頁把表單改成可以傳檔案。少了這一段,客人選了照片,送出時照片也不會傳上來。
第 3 段在評價送出後處理照片,會先確認四件事:這是商品的評價、客人有登入而且買過這件商品、檔案真的是圖片(看的是檔案內容,不是檔名,把文字檔改名成 .jpg 也會被擋下)、檔案沒有超過 3 MB。都沒問題,才把照片存進網站的媒體庫,和這則評價連在一起。不符合的話,評價照樣送出,只是不帶照片。
第 4 段在評價內容下面顯示照片的小圖,點了開大圖。大圖用的是網站重新產生的尺寸,手機拍的照片常常帶著拍攝地點等資訊,重新產生的尺寸不會帶這些資訊,比直接給原始檔安全。
第 5 段在評價被刪除的時候,把照片也從媒體庫一起刪掉,不會留下一堆找不到主人的圖片。
測試結果
我們在本機測試站(WordPress 7.1.3、WooCommerce 11.2.1)測試,Twenty Twenty-Five 和 Storefront 兩種佈景主題都實際用瀏覽器送出過:
- 買過「手工皂禮盒」的會員,在商品頁看到上傳照片的欄位;他沒買過的「精油組合」,評價表單不出現,只顯示「只有註冊並且購買過商品的顧客才能撰寫評價。」。
- 選五顆星、寫評價、附一張照片送出;後台核准後,商品頁的評價下面出現 150×150 的小圖,名字旁邊標著「(已購買)」,點小圖開的是 1024×768 的大圖。
- 把文字檔改名成 .jpg 送出、送出超過 3 MB 的檔案:評價有送出,照片沒有存。
- 沒買過的帳號直接送出評價和照片:WooCommerce 擋下,顯示「只有 “通過驗證的會員” 才能參與評論」。
- 刪除那則評價,媒體庫裡的照片也跟著刪除。
- 後台「商品 > 商品評價」的列表,也看得到評價附的照片。
第三步:商店頁顯示星等
商品有了評價,商店頁和分類頁如果也看得到星等,客人在挑商品時就能參考。
傳統佈景主題(例如 Storefront)不用設定,商品有評價就會在商品名稱下面顯示星等。新版的區塊佈景主題(例如 Twenty Twenty-Five),預設的商店頁沒有星等,要到「外觀 > 設計」的「範本」,打開「產品目錄」這個範本,在「商品系列」裡的「產品範本」加上「產品評分」區塊,存檔之後每件商品都會顯示。
真實的評價,是網店最好的說服力
評價只給買過的人寫,照片是客人自己拍的,新客人看到才會相信。剛開始評價不多,可以在訂單完成後的信裡,邀請客人回來寫評價、附一張照片;收到評價也記得回覆,感謝好評,負評就好好說明怎麼處理。見證和回購怎麼設計,可以看〈讓客人幫你帶客人:見證、回購、轉介紹設計〉。
MIMI 專做客製化網頁設計,購物車電商網站的商品頁、評價區和會員功能,都可以依你的商品一起規劃。MIMI 提供台灣網頁設計服務,臺北、新北到全台灣的店家,都可以用電話、Email 直接和設計師討論;費用可以先看首頁的製作費用參考,歡迎聯絡 MIMI。
