check_comment( string $author, string $email, string $url, string $comment, string $user_ip, string $user_agent, string $comment_type )
检查注释是否通过允许添加的内部检查。
Check whether a comment passes internal checks to be allowed to add.
说明(Description)
如果在管理中设置了手动注释审核,则所有检查(无论其类型和白名单)都将失败,并且函数将返回false。
如果链接数超过管理中的数量,则检查失败。如果任何参数内容与单词黑名单匹配,则检查失败。
如果评论作者之前已被批准,则评论将自动白名单。
如果所有检查都通过,函数将返回true。
参数(Parameters)
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
$author | (string) | 必需 | 评论作者姓名。 |
(string) | 必需 | 评论作者电子邮件。 | |
$url | (string) | 必需 | 评论作者URL。 |
$comment | (string) | 必需 | 评论的内容。 |
$user_ip | (string) | 必需 | 评论作者IP地址。 |
$user_agent | (string) | 必需 | 评论作者用户代理。 |
$comment_type | (string) | 必需 | 注释类型,可以是用户提交的注释、trackback或pingback。 |
返回(Return)
(bool)如果所有检查都通过,则为true,否则为false。源码(Source)
/**
* Check whether a comment passes internal checks to be allowed to add.
*
* If manual comment moderation is set in the administration, then all checks,
* regardless of their type and whitelist, will fail and the function will
* return false.
*
* If the number of links exceeds the amount in the administration, then the
* check fails. If any of the parameter contents match the blacklist of words,
* then the check fails.
*
* If the comment author was approved before, then the comment is automatically
* whitelisted.
*
* If all checks pass, the function will return true.
*
* @since 1.2.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $author Comment author name.
* @param string $email Comment author email.
* @param string $url Comment author URL.
* @param string $comment Content of the comment.
* @param string $user_ip Comment author IP address.
* @param string $user_agent Comment author User-Agent.
* @param string $comment_type Comment type, either user-submitted comment,
* trackback, or pingback.
* @return bool If all checks pass, true, otherwise false.
*/
function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) {
global $wpdb;
// If manual moderation is enabled, skip all checks and return false.
if ( 1 == get_option('comment_moderation') )
return false;
/** This filter is documented in wp-includes/comment-template.php */
$comment = apply_filters( 'comment_text', $comment );
// Check for the number of external links if a max allowed number is set.
if ( $max_links = get_option( 'comment_max_links' ) ) {
$num_links = preg_match_all( '/]*href/i', $comment, $out );
/**
* Filter the maximum number of links allowed in a comment.
*
* @since 3.0.0
*
* @param int $num_links The number of links allowed.
* @param string $url Comment author's URL. Included in allowed links total.
*/
$num_links = apply_filters( 'comment_max_links_url', $num_links, $url );
/*
* If the number of links in the comment exceeds the allowed amount,
* fail the check by returning false.
*/
if ( $num_links >= $max_links )
return false;
}
$mod_keys = trim(get_option('moderation_keys'));
// If moderation 'keys' (keywords) are set, process them.
if ( !empty($mod_keys) ) {
$words = explode("
", $mod_keys );
foreach ( (array) $words as $word) {
$word = trim($word);
// Skip empty lines.
if ( empty($word) )
continue;
/*
* Do some escaping magic so that '#' (number of) characters in the spam
* words don't break things:
*/
$word = preg_quote($word, '#');
/*
* Check the comment fields for moderation keywords. If any are found,
* fail the check for the given field by returning false.
*/
$pattern = "#$word#i";
if ( preg_match($pattern, $author) ) return false;
if ( preg_match($pattern, $email) ) return false;
if ( preg_match($pattern, $url) ) return false;
if ( preg_match($pattern, $comment) ) return false;
if ( preg_match($pattern, $user_ip) ) return false;
if ( preg_match($pattern, $user_agent) ) return false;
}
}
/*
* Check if the option to approve comments by previously-approved authors is enabled.
*
* If it is enabled, check whether the comment author has a previously-approved comment,
* as well as whether there are any moderation keywords (if set) present in the author
* email address. If both checks pass, return true. Otherwise, return false.
*/
if ( 1 == get_option('comment_whitelist')) {
if ( 'trackback' != $comment_type && 'pingback' != $comment_type && $author != '' && $email != '' ) {
// expected_slashed ($author, $email)
$ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$author' AND comment_author_email = '$email' and comment_approved = '1' LIMIT 1");
if ( ( 1 == $ok_to_comment ) &&
( empty($mod_keys) || false === strpos( $email, $mod_keys) ) )
return true;
else
return false;
} else {
return false;
}
}
return true;
}
更新版本 | 源码位置 | 使用 | 被使用 |
---|---|---|---|
1.2.0 | wp-includes/comment.php:39 | 1 function | 8 |