提交评论时忽略了isset($_POST[‘SUBMIT’])

时间:2015-11-17 作者:Jon Kantner

我正在为我的博客开发一个Sware filter插件。它应该拒绝在名为swears.txt. 以下是我在单贴页面上用于评论表单的代码:

<?php
if (isset($_POST[\'submit\'])) {
    echo \'Submitted\'; // for debugging purposes
    $swearsFile = \'swears.txt\';
    $swearsCntnt = file_get_contents($swearsFile);
    $swearList = explode("\\n", $swearsCntnt);
    $swearWords = "/";
    for ($i = 0; $i < count($swearList); ++$i) {
        if ($i == 0)
            $swearWords .= rtrim($swearList[$i]);
        else
            $swearWords .= "|" . rtrim($swearList[$i]);
    }
    $swearWords .= "/i";
    if (preg_match($swearWords, $_POST[\'comment\'])) {
        wp_die( __( \'<strong>ERROR</strong>: You have entered forbidden text. Please consider revising.\' ), 200 );
    }
}
?>
问题是,在我按下“发表评论”按钮后,除了提交的评论显示为新评论外,什么都没有发生。我使用echo来验证是否按下了Post Comment按钮,无论其下面的语句是否返回true,但什么都没有发生。如何让WordPress确认if (isset($_POST[\'submit\']))?

3 个回复
最合适的回答,由SO网友:Mateusz Hajdziony 整理而成

这可能无法直接回答您的问题(因为我甚至没有想过$_POST[\'submit\'] 将被忽略,或者如果它是正确的),但您应该尽可能使用过滤器/操作。

筛选注释文本的正确筛选器为pre_comment_content, 你应该这样使用它:

function my_filter_comment_for_swear_words( $comment_content ) {
    // Verify if $comment_content contains swear words here
    // return $comment_content if it doesn\'t contain forbidden words
    // or wp_die if it does
}
add_filter( \'pre_comment_content\', \'my_filter_comment_for_swear_words\' );
像往常一样,此代码将进入functions.php 文件或自定义插件(取决于您的设置)。

SO网友:Mark Kaplun

这不是真的,因为评论表单的操作url指向wp评论帖子。处理提交的网站根目录下的php文件。在该文件中成功处理提交后,用户将被重定向回完成提交的帖子。

正如其他答案所说,您做错了,应该使用可用的注释处理挂钩来触发代码的执行(如果需要的话)

SO网友:flomei

我不想阻止你,但你在这里做的是WordPress的标准功能。看看Settings -> Discussion 在这里,您将找到一个文本区域,您可以在其中输入触发评论需要调整的单词。

此外,你可能走错了方向。您不应该只是“等待”提交,而应该创建a hook 在相关地点。你可以使用comment_post 在发布注释时触发函数。