WordPress 評論一直是垃圾信息的重災區(qū),只要您的網站有一定的流量,并且評論功能是打開的,那么你一定受到過WordPress垃圾評論信息的困擾,有一些插件可以為WordPress評論添加驗證碼字段來阻止垃圾信息。但是為了這一個功能添加插件有時候會影響到網站的性能。
在本文中,我將為大家展示怎么在 WordPress 評論表單中添加自定義驗證碼字段。主要是添加一個 “今昔是何年?的問題,希望垃圾評論機器人不懂詩詞。
步驟 1:在評論表單中添加自定義字段
要在 WordPress 評論表單中添加自定義字段,我們可以使用comment_form_defaults過濾器。該過濾器會返回一個評論表單字段數組,你可以在其中添加新字段。該過濾器適用于經典主題和區(qū)塊主題。
下面的代碼片段添加了一個新字段,標簽為 “今夕是何年?”:
function wprs_add_captcha_comment_field( $fields ) {
$fields['captcha'] = sprintf(
'<p class="comment-form-captcha">%s %s</p>',
sprintf(
'<label for="author">%s %s</label>',
__( '今昔是何年?', 'text_domain' ),
wp_required_field_indicator()
),
'<input id="comment-captcha" name="captcha" size="30" type="text" required>'
);
return $fields;
}
add_filter( 'comment_form_default_fields', 'wprs_add_captcha_comment_field' );
添加完這段代碼之后,刷新網站,我們就會看到這個字段出現在了評論表單中。如果沒有,說明你的網站沒有使用 WordPress 核心的評論表單,你需要弄清楚是你的主題還是插件在修改。
步驟 2:驗證提交評論時的自定義驗證碼
有了自定義驗證碼字段,下一步就是在提交評論時驗證輸入。我們可以使用pre_comment_on_post鉤子,在 WordPress 發(fā)表評論之前進行驗證。
下面就是我用來驗證自定義驗證碼字段的代碼:
function wprs_verify_comment_captcha() {
if ( empty( $_POST['captcha'] ) || (int) date( 'Y' ) !== (int) sanitize_text_field( wp_unslash( $_POST['captcha'] ) ) ) {
wp_die(
'<p>' . __( '<strong>驗證失敗,:</strong> 你知道今夕是何年嗎?', 'text_domain' ) . '</p>',
__( '驗證失敗,請不要發(fā)表垃圾評論。' ),
[
'response' => 200,
'back_link' => true,
]
);
}
}
add_filter( 'pre_comment_on_post', 'wprs_verify_comment_captcha' );
這段代碼將檢查用戶是否提交了驗證碼字段,并且該值是否等于 PHPdate()函數返回的當前年份。如果這兩項檢查都沒有通過,我們將使用wp_die()函數終止執(zhí)行,并顯示一條提示信息。
總結
正如你所看到的,在 WordPress 評論中添加自定義驗證碼字段非常簡單。它只需要幾個函數。像 Akismet 這樣的服務價格昂貴,而且大多數免費的反垃圾郵件插件都很臃腫,或者需要像 reCaptcha 這樣的第三方服務。


