本篇文章更新時間: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
