WordPress 评论一直是垃圾信息的重灾区,只要您的网站有一定的流量,并且评论功能是打开的,那么你一定受到过WordPress垃圾评论信息的困扰,有一些插件可以为WordPress评论添加验证码字段来阻止垃圾信息。但是为了这一个功能添加插件有时候会影响到网站的性能。
在本文中,我将为大家展示怎么在 WordPress 评论表单中添加自定义验证码字段。主要是添加一个 “今昔是何年?的问题,希望垃圾评论机器人不懂诗词。
步骤 1:在评论表单中添加自定义字段
要在 WordPress 评论表单中添加自定义字段,我们可以使用comment_form_defaults
过滤器。该过滤器会返回一个评论表单字段数组,你可以在其中添加新字段。该过滤器适用于经典主题和区块主题。
下面的代码片段添加了一个新字段,标签为 “今夕是何年?”:
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 发表评论之前进行验证。
下面就是我用来验证自定义验证码字段的代码:
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>',
__( '验证失败,请不要发表垃圾评论。' ),
[
'response' => 200,
'back_link' => true,
]
);
}
}
add_filter( 'pre_comment_on_post', 'wprs_verify_comment_captcha' );
这段代码将检查用户是否提交了验证码字段,并且该值是否等于 PHPdate()
函数返回的当前年份。如果这两项检查都没有通过,我们将使用wp_die()
函数终止执行,并显示一条提示信息。
总结
正如你所看到的,在 WordPress 评论中添加自定义验证码字段非常简单。它只需要几个函数。像 Akismet 这样的服务价格昂贵,而且大多数免费的反垃圾邮件插件都很臃肿,或者需要像 reCaptcha 这样的第三方服务。