1. 首页
  2. WordPress 函数手册

check_comment()

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) 必需 评论作者姓名。
$email (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

笔记(Notes)

简单用例

check_comment() 为WP2原创文章,链接:https://www.wp2.cn/functions/check_comment/