[WordPress] Contact Form 7 表單防止機器人發送垃圾郵件的技巧

本篇文章更新時間:2020/10/21
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~


前陣子網站上一直都有機器人成功留言,也不是說沒用 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 '[contact-form-7 404 "找不到符合條件的項目"]';
    }

    $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(
            '[contact-form-7 404 "找不到符合條件的項目"]',
            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    = "<p id='mxp_f_{$id}'></p><script>{$j}jQuery(document).ready(function(){jQuery('#mxp_f_{$id}').html(mxp_f_{$id}['html']);});</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


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *