本篇文章更新時間:2020/10/21
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
前陣子網站上一直都有機器人成功留言,也不是說沒用 Google reCAPTCHA,但神奇的事:沒效!
想說好吧,內建的功能無法抵擋就來增加點機器人攻擊的難度,讓網站行為與「普通 WordPress 搭配 Contact Form 7 的網站」不同就可以避開了。
研究一下 Contact Form 7(下略稱 CF7),把功能短碼繼承出來,改變前端呈現的作法。
程式碼如下:
function mxp_wpcf7_contact_form_tag_func($atts, $content = null, $code = '') {
if (is_feed()) {
return '錯誤: 找不到符合條件的聯絡表單。
';
}
$atts = shortcode_atts(
array(
'id' => 0,
'title' => '',
'html_id' => '',
'html_name' => '',
'html_class' => '',
'output' => 'form',
),
$atts, 'wpcf7'
);
$id = (int) $atts['id'];
$title = trim($atts['title']);
if (!$contact_form = wpcf7_contact_form($id)) {
$contact_form = wpcf7_get_contact_form_by_title($title);
}
if (!$contact_form) {
return sprintf(
'錯誤: 找不到符合條件的聯絡表單。
',
esc_html(__('Not Found', 'contact-form-7'))
);
}
$f = array();
$f['html'] = $contact_form->form_html($atts);
$j = "var mxp_f_{$id}=" . json_encode($f) . ";";
$script = "";
return $script; //$contact_form->form_html($atts);
}
add_shortcode('mxp_contact-form-7', 'mxp_wpcf7_contact_form_tag_func');
原本是直接將表單 HTML 標籤輸出,現在改透過 JavaScript 來包過回寫插入網站。
透過這招,就能避開「不會執行 JavaScript」的機器人了,有沒有可能還是被破?有!但難度高不少,我這小站不值得拉XD
這段程式貼到(子)主題中的 functions.php
裡後,還要把原本插入表單的短碼補上 mxp_
開頭。
例如:
原本的 CF7 表單代碼是: [
contact-form-7 id="88"
]
改成 [
mxp_contact-form-7 id="88"
]
。
透過改變短碼來切換使用的程式碼片段,不想使用時改回原本的就好囉!執行的結果都是一樣的,肉眼看不出差異,但對機器人來說就是完全不一樣了。
想了解其他 CF7 玩法,可以點擊網站上的標籤找尋其他文章: Contact Form 7