check_comment()判断一个评论是否符合有效

目录

描述

译文

check_comment()判断评论是否传递WordPress Comment_Moderation 的内部检验。

原文

check_comment() checks whether a comment passes internal checks set by WordPress Comment_Moderation.

check_comment() 描述

用法

<?php
   check_comment
$author$email$url$comment$user_ip,
         
$user_agent$comment_type );
?>

check_comment() 用法

参数

$author

(string) (必填) Comment author name.

默认值: None

$email

(string) (必填) Comment author email.

默认值: None

$url

(string) (必填) Comment author URL.

默认值: None

$comment

(string) (必填) Comment contents.

默认值: None

$user_ip

(string) (必填) Comment author IP address.

默认值: None

$user_agent

(string) (必填) Comment author user agent.

默认值: None

$comment_type

(string) (必填) Comment type (comment, trackback, or pingback).

默认值: None

check_comment() 参数

返回值

(boolean) 

This function returns a single boolean value of either true or false.

Returns false if in Comment_Moderation:

  • The Administrator must approve all messages,
  • The number of external links is too high, or
  • Any banned word, name, URL, e-mail, or IP is found in any parameter except $comment_type.

Returns true if the Administrator does not have to approve all messages and:

  • $comment_type parameter is a trackback or pingback and part of the blogroll, or
  • $author and $email parameters have been approved previously.

Returns true in all other cases.

check_comment() 返回值

示例

Simple use case

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
 <?php 
 $author = "John Charles Smith";
 $email = "jsmith@example.com";
 $url = "http://example.com";
 $comment = "Excellent...";
 $user_ip = "12.34.56.78";
 $user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11";
 $comment_type = "comment";
 if (check_comment( $author, $email, $url, $comment, $user_ip, $user_agent, $comment_type )) {
   echo "The Comment robot says: Thank you for your comment.";
 } else {
   echo "The Comment robot says: This comment is NOT valid!";
 } 
?>

check_comment() 示例

注意

check_comment() 注意

历史

  • 添加于 版本: WordPress Version 1.2

check_comment() 历史

源文件

check_comment() 函数的代码位于 wp-includes/comment.php.

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
/**
 * 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;
}

check_comment() 源文件