在現代網站開發中,表單垃圾郵件是一個持續存在的問題。
因此,虎鯨orca-admin外掛採用OpenAI/Gemini API建立一個過濾信件的系統,減低惱人的垃圾信問題。
今天我將分享如何為 Forminator 外掛加上你自已的郵件檢查邏輯呢? 有一樣需求的朋友再看看吧
找不到官網文件時,直接看Forminator的原始碼即可,這也是我喜歡WP外掛生態圈可以常常基於其他外掛的Hook進行二次開發(功能擴展)
如何Hook Forminator的表單呢?
Forminator提供一個表單寄送前檢查的action: forminator_custom_form_mail_before_send_mail
add_action('forminator_custom_form_mail_before_send_mail',
array($this, 'validate_before_send_mail'), 10, 4);
<?php
public function validate_before_send_mail($mail_instance, $custom_form, $data, $entry) {
try {
// 取得表單基本資訊
$form_id = $custom_form->id ?? 'unknown';
$form_name = $custom_form->settings['formName'] ?? "Forminator Form $form_id";
ORCA_Logger::log("Forminator Form - ID: $form_id, Name: $form_name");
// 組合表單內容
$content = $this->format_forminator_data($data, $custom_form);
// 智慧表單類型檢測
if ($this->is_subscription_form($data)) {
// 簡易檢查模式(僅驗證 Email 格式)
$this->validate_subscription_form($data);
} else {
// 完整垃圾郵件檢測
$this->validate_form_content($content, $form_name);
}
} catch (\Exception $e) {
// 錯誤處理:支援 AJAX 和一般請求
ORCA_Logger::log("垃圾郵件檢測失敗: " . $e->getMessage());
if (wp_doing_ajax()) {
wp_send_json_error([
'message' => $e->getMessage(),
'type' => 'spam_detected'
]);
}
wp_die($e->getMessage(), '垃圾郵件檢測', [
'back_link' => true,
'response' => 403
]);
}
}
結果如下:
可以成功把攔到的錯誤訊息也回傳給Forminator顯示