獨立外掛不整合進 Atelementor Widgets
核心需求已成形前後台、路由、通知與查詢已有方向
規格尚未封版仍有文件衝突與 55 項空白答覆
1. 定位與環境
已確認
- 獨立 WordPress 外掛,涵蓋 Contact Us 表單、投稿資料、Email、查詢紀錄與管理後台。
- 基準環境:WordPress 6.9.4、PHP 8.2.30、Elementor Pro、WooCommerce、WPML、ACF。
- 前台由 shortcode 嵌入 Elementor,樣式及互動由外掛控制。
- 採自訂資料表,不使用 CPT;必須有
dbDelta()與 schema version 升級機制。 - Product type 由外掛獨立管理,不與 WooCommerce 分類即時連動。
目前是完整度較高的需求草案,仍不能視為可直接開工的核准規格。
2. 前台表單
互動
- 固定顯示 Country / Location、Product type 與「查看紀錄」入口。
- 選定 Country 與 Product type 後展開完整表單;送出成功顯示 popup 並重置表單。
- 前端錯誤顯示於欄位旁,後端或伺服器錯誤顯示於表單尾端。
欄位與規則
| 欄位 | 需求 |
|---|---|
| Country / Location | 後台維護,預設空白;每筆保存電話國碼。 |
| Product type | 可新增、編輯、刪除、停用、排序;是否必填有文件衝突。 |
| 姓名、Email | First name、Last name、Email 必填;Email 需做格式與 header injection 防護。 |
| Phone | 非必填;國碼依 Country 自動帶入。 |
| Purpose | 後台維護。General Question、Sales Inquiry、Technical Support、Press/Marketing、Product Feedback or Suggestion;OEM 是否預載待確認。 |
| Message | 必填,最多 2,000 字元。 |
| Privacy | 必須勾選;目標 Privacy Policy 頁尚未完成。 |
附件
- 支援一次多選、分批追加與逐檔移除。
- 目前格式 JPG、PDF、MP4;設定頁可維護副檔名,但伺服器須驗證真實 MIME。
- 單檔預設 5 MB;建議最多 5 檔、總計 20 MB。MP4 容量仍待確認。
- 實體檔名隨機化,不公開檔案路徑,下載一律經權限或簽章驗證 endpoint。
3. 投稿、查詢與回覆
- 用戶送出表單,系統驗證 nonce、欄位、黑名單、rate limit、附件與機器人陷阱。
- 資料寫入後,以
country × product_type × purpose找 receiver 與 cc;無對應時寄給 Main CS。 - 用戶收到投稿確認信與 6 位驗證碼,管理員收到完整投稿通知。
- 管理員查看、轉交或回覆;初版只允許一次回覆,完成後狀態 Closed。
- 用戶收到純通知信,透過有期限的 HMAC 簽章連結直接查看回覆。
- 主動查詢或信件遺失時,在查看紀錄頁輸入驗證碼。
驗證碼
- 每筆案件獨立 6 位純數字,預設 7 天,可由設定頁調整。
- 可重發;重發後舊碼失效並重算期限。
- 錯誤嘗試須限制次數與暫時鎖定。
- 成功驗證後是否永久作廢,與日後再次查詢的流程有衝突。
狀態
規劃 New、Read、Transferred、Closed。回覆後自動 Closed;Transferred 後新舊受理人的權限仍需定案。
4. WordPress 後台
- 獨立 Contact 選單:訊息、Country、Product type、Purpose、CS 路由、黑名單、統計、匯出、設定。
- Country、Product type、Purpose 可新增、編輯、停用、排序及維護多語系文字。
- CS 路由:Country → Product type tabs → Purpose rows → receiver + cc。
- 訊息清單支援日期、Country、Product type、Purpose、狀態與關鍵字篩選。
- 詳情顯示投稿資料、附件、狀態、負責人及歷程。
- 回覆記錄保存人員 display name、時間、內容與附件;送出後不可編輯或刪除。
- 回覆支援 CC / BCC 及多附件;通知 Email 不直接附檔。
- Transfer 可重選 country / product / purpose 與負責人,並寄轉交通知。
- Admin Bar 顯示未讀角標;Dashboard Widget 為選配。
黑名單
- 初版提供 IP、Email 黑名單 UI,可新增與實刪。
- 命中回傳通用錯誤,不揭露封鎖狀態,不保存被擋嘗試。
- IP UI 必須提示共用 IP 誤傷風險,建議優先封鎖 Email。
設定頁六項
寄件者名稱、寄件者 Email、備援收件信箱、附件單檔上限、允許副檔名、驗證碼有效天數。SMTP 帳密由 WP Mail SMTP 管理。
5. Email
| 模板 | 內容 |
|---|---|
| User verification | 確認文字、驗證碼、查看紀錄入口、請勿回覆、重新填表 CTA。 |
| Admin notify | 完整投稿內容、附件後台連結、訊息詳情連結;To receiver、Cc 路由設定。 |
| Reply notify | 只通知已有回覆,不放回覆內容;提供簽章查看按鈕與重新填表 CTA。 |
- 使用
wp_mail()+WP Mail SMTP+SiteGround SMTP。 - 模板路徑
templates/emails/{lang}/{type}.php,缺檔 fallback 英文。 - 所有對外信件標示系統自動寄送、請勿直接回覆。
noreply@必須是真實信箱;部署時設定轉寄客服或自動回覆。
6. WPML 多語系
已確認 10 語系
English(預設/fallback)、簡中、繁中、French、German、Italian、Japanese、Korean、Russian、Spanish。
- 投稿保存當下
ICL_LANGUAGE_CODE;WPML 未啟用時 fallbacken。 - Country、Product type、Purpose 需有 10 語系文字;建議英文必填,其他缺值 fallback 英文。
- Email 初版提供英文、簡中、繁中,其他七種先使用英文。
- 頁面翻譯由 Elementor / WPML 處理,外掛負責 shortcode 內部內容。
7. 安全與個資
- 輸入 sanitize、輸出 escape、SQL prepare、表單 nonce。
- 附件檢查副檔名、MIME、數量、容量,並使用隨機檔名。
- 初版防濫用:honeypot、未滿 3 秒送出的時間陷阱、IP/Email rate limiting。
- 建議門檻:同 IP 10 分鐘最多 3 次;同 Email 24 小時最多 5 次,尚待核准。
- 不得無條件信任 X-Forwarded-For;只有已知 proxy 才能採信轉送 header。
- 簽章 token 使用 HMAC,包含 contact_id 與期限;無效時回驗證碼頁。
- 資料及附件保留期限、WordPress Personal Data Exporter / Eraser 是否納入初版待確認。
8. 統計與匯出
- 統計頁依日期區間與 Country 顯示 Total / New / Read / Transferred / Closed。
- 匯出支援日期、Country、Product type、Purpose、狀態及關鍵字篩選。
- 建議輸出 UTF-8 BOM CSV,以 streaming 處理,不限制筆數。
- 包含訊息資料、狀態、回覆時間、回應天數、是否回覆、負責人;附件只輸出檔名。
9. 排除範圍
- RMA。
- 會員與登入。
- Area 地區群組。
- Subject、City、Address、Zip code。
- 多輪訊息對話。
- 後台編輯 Email 模板。
- 黑名單原因備註與訊息詳情一鍵封鎖。
10. 封版前必須確認
文件衝突
- Product type 是否必填。
- 狀態由人工或系統動作切換。
- Purpose 初始資料是否包含 OEM。
- 驗證碼成功後是否作廢,以及用戶之後如何再查詢。
需求缺口
- 完整 schema、表名、附件關聯及負責人快照。
- 後台語言、CS 角色/權限、可指派 User 範圍。
- Country 初始清單、Privacy Policy URL、查看紀錄採獨立頁或 popup。
- Transfer 權限、管理員能否刪除訊息。
- 簽章有效期、寄信失敗策略與 mail log。
- MP4 容量、資料及附件保留期限。
- 線上站 CDN/proxy 狀況,以及 Apache 或 Nginx。
- GDPR hooks、Dashboard Widget、WooCommerce 分類快速匯入是否納入。
先解決四項文件衝突並完成待確認清單,再產出正式規格與開發計畫。