Codotx Forms
以 CPT 管理課前問卷、前台互動式問卷(沿用網站 header)、作答存後台並寄通知信。由 Claude Design 移植。
★ 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/oberonlai/cdx-forms/archive/refs/heads/main.zip以 CPT 管理「課前問卷」內容,前台顯示互動式問卷(沿用網站既有 header),作答結果存入後台並寄送通知信。
由 Claude Design 專案 課前問卷.dc.html 移植而成,已改寫為純 vanilla JS,不再依賴原始的 DC runtime 與外部送信服務。
功能
- 註冊「課前問卷」CPT,後台可建立多份問卷、各自管理內容。
- 題型支援單選、複選(可多選)、填寫內容(自由文字),每題可獨立切換。
- 每份問卷可編輯:開場標題/說明、題目與選項(可增刪)、主題色、 是否收集聯絡資料、聯絡步驟文案、完成訊息、通知信箱。
- 前台為互動式單選問卷(開場 → 逐題作答 → 聯絡資料 → 完成), 支援鍵盤操作(A/B/C/D 選項、Enter、Backspace)。
- 前台沿用佈景主題既有的 header/footer(不套設計自帶的品牌列)。
- 支援 WordPress Abilities API:可透過 MCP 用 AI 新增/編輯題目、管理回覆名單(需安裝 Abilities API)。
- 送出後將回覆存為「問卷回覆」CPT,並寄一封通知信到設定的信箱。
使用方式
- 於後台「課前問卷 → 新增問卷」建立問卷,新問卷會預帶一組預設題目。
- 編輯題目、選項與設定後發佈。
- 直接開啟該問卷的網址即可(沿用網站 header),或用短碼
[cdx_survey id="問卷ID"]嵌入任一頁面。 - 回覆會出現在「課前問卷 → 問卷回覆」,並寄到設定的通知信箱。
安全性
- AJAX 送出以 nonce 驗證,答案在後端以「儲存的題目」重建(不信任前端傳來的題目標籤)。
- 前台注入的 JSON 設定以
JSON_HEX_TAG等旗標跳脫,避免</script>破格。 - 公開送出端點加上 per-IP 節流與 payload 長度上限,降低機器人洗版與外送信件濫用。
- 通知信不將使用者名稱帶入郵件標頭。
測試
composer global require phpunit/phpunit # 或使用已安裝的 phpunit
phpunit
單元測試涵蓋「答案以伺服器端題目重建」的安全邏輯(tests/),
不需 WordPress 測試資料庫即可執行。
販售 / 授權(Licento)
本外掛可搭配 Licento 授權伺服器販售:客戶輸入序號啟用後才提供自動更新。
賣家設定(在主檔 cdx-forms.php 或 wp-config.php 定義常數):
define( 'CDX_FORMS_LICENSE_SERVER', 'https://your-licento-site.com' );
define( 'CDX_FORMS_LICENSE_PRODUCT_ID', 123 ); // Licento 後台的產品 ID
- 未設定時授權機制完全關閉(外掛照常運作、不顯示提示)。
- 設定後為硬性閘門:未啟用有效序號前,前台表單不顯示、送出被拒、MCP 管理停用。
- 後台「Codotx Forms → 授權」可輸入/停用序號;每日自動心跳驗證。
- 有效授權才會收到自動更新;更新套件從 Licento(GitHub Releases)取得,下載時即時換發單次 token。
- 自動更新的版本來源正是本 repo 的
release.yml(打v*tag 會建立 GitHub Release)。
備註
- 原設計標題字體使用 Sansation(需自備字型檔),本外掛以 Google Fonts 的 Outfit 作為替代。
- 通知信透過
wp_mail()寄出,站台建議搭配 SMTP 外掛。
License
GPL-2.0-or-later