我正在为我的博客开发一个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\']))
?
最合适的回答,由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
文件或自定义插件(取决于您的设置)。