如果网站字段包含任何内容,则自动拒绝评论

时间:2018-10-08 作者:Steve Halcovitch

我做了很多搜索,但似乎找不到一个黑客来做这件事,我能找到的就是如何从表单中删除网站字段。我想把它留在那里,但如果有人在网站字段中输入url并试图发表评论,它将自动被拒绝。

3 个回复
SO网友:Steve Halcovitch

通过在注释中编辑url字符串的最大长度来解决这个问题。php从200到1。唯一的问题是任何wordpress更新每次都会覆盖此内容。我该如何进行功能上的更改呢?

SO网友:Rick Hellewell

如果你认为限制URL会阻止所有垃圾邮件,那就错了。大多数垃圾邮件都是自动发送的:垃圾邮件发送者会找到你的评论表单,创建一个自动表单填充器,然后用他们的垃圾邮件填充评论。

因此,如果您禁止评论URL,xpam问题不会消失。

我知道很多关于在联系人表单和评论中防止垃圾邮件的知识;编写插件和独立代码以防止垃圾邮件(请参阅[here][1] ). 我的技术大部分都很成功,但仍然收到一些垃圾邮件。正在开发一个新版本,它将进一步减少自动垃圾邮件。

您可能会考虑在评论表单上启用reCAPTCHA。这有助于减少垃圾邮件,但我发现(我已经寻找了很多年)没有什么能完全删除垃圾邮件。

隐藏字段不起作用。“什么是2+4”这样的“问题”是行不通的。CAPTCHA不起作用(尽管版本2 ReCaptcha更有效)。

我的做法是启用Akismet,并使用我的“FormSpammerTrap for Comments“插件(它有一些额外的技术来减少垃圾邮件机器人填写我的评论的机会)。

这有助于消除大量评论。但没有什么是百分之百有效的——甚至我的解决方案也没有。

SO网友:Frank P. Walentynowicz

分析

最常见的误解是,现代垃圾邮件发送者使用评论表单。他们根本不关心他们。他们直接发布评论数据,绕过表单处理,使用验证码、验证码等,将评论表单留给合法用户(人类)。在检测垃圾评论的过程中,有两名玩家参与其中——WordPress和一个补充插件。有了正确的设置,WordPress在捕获垃圾邮件方面相当成功,但无法捕获所有垃圾邮件。插件应该进一步完善流程。

解决方案

多年来,我在各种生产网站上实施了以下方法,使它们几乎没有垃圾邮件。你可能会怀疑,所以不要相信我的话,试试看,然后做出你自己的判断。

第1部分。WordPress中Settings -> Discussion 设置以下建议选项:

检查Allow people to post comments on new articles

检查Comment author must fill out name and email

检查Comment must be manually approved

设置的值Hold a comment in the queue if it contains 至1

根据您的需要选择其他选项。

第2部分。必须使用插件创建文件fpw-antispam.php, 使用下面的代码,并将其放置在/wp-content/mu-plugins 文件夹

<?php
/*
Plugin Name: FPW Anti Spam

Description: Handles spammed comments and disables comments trash

Plugin URI: http://fw2s.com/
Version: 0.1
Author: Frank P. Walentynowicz
Author URI: http://fw2s.com/

Copyright 2014 Frank P. Walentynowicz (email : [email protected])

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as 
published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

// prevent direct access
if (!defined(\'ABSPATH\'))  
    die(\'Direct access to this script is not allowed!\');

function fpwDeleteComment($commentID, $approved, $commentData) {
    if(\'trash\' === $approved || \'spam\' === $approved) {
        $requestedBy = (empty($commentData[\'comment_author_url\'])) ? \'WordPress\' : \'must use plugin\';
        if(wp_delete_comment($commentID, true)) {
            error_log("Comment ({$commentID}) has been PERMANENTLY DELETED by {$requestedBy}");
        } else {
            error_log("Comment ({$commentID}) - delete failed");
        }
    } else {
        error_log("Comment ({$commentID}) - status: {$approved}");
    }   
}
add_action(\'comment_post\', \'fpwDeleteComment\', 100, 3);

function fpwDeleteTrashedComment($commentID, $commentObject) {
    if(wp_delete_comment($commentID, true)) {
        error_log("Comment ({$commentID}) has been TRASHED and PERMANENTLY DELETED");
    } else {
        error_log("Comment ({$commentID}) - delete failed");
    }
}
add_action(\'comment_trash_\', \'fpwDeleteTrashedComment\', 100, 2);

function fpwCommentHandler($approved , $commentdata) {
    return empty($commentdata[\'comment_author_url\']) ? $approved : \'trash\';
}
add_filter(\'pre_comment_approved\' , \'fpwCommentHandler\' , 100, 2);
Note: error_log 函数调用可以帮助您不受干扰地跟踪插件的进度。一旦你确信它能按预期工作,你就可以对这些电话进行评论。

第3部分。将以下行添加到style.css 当前主题:

p.comment-form-url { display: none }
这只会对用户隐藏作者的URL字段,这样用户就不会意外地填写此字段。请记住保持注释模板不变-不要删除此字段!

更新,因为它工作得很好,我甚至没有回头对上面的方法做任何更改。在发布我的答案后,我决定看看是否有任何改进。最终结果如下。

必须使用的插件被简化为一个过滤器,最重要的变化是,删除垃圾评论,而不访问数据库。

function fpwCommentHandler($approved , $commentdata) {
    if (!empty($commentdata[\'comment_author_url\']) || \'spam\' == $approved || \'trash\' == $approved)
        return new WP_Error( \'spam\', \'Comment spam detected!\');
    return $approved;
}
add_filter(\'pre_comment_approved\' , \'fpwCommentHandler\' , 100, 2);
Note: 如果您觉得不舒服,可以按原样使用(不需要日志记录),您可以自己添加日志记录。我已经在我的生产网站上实现了这个新方法。

结束