check_comment()
最后更新于:2021-11-25 20:29:30
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.
参数
- $author
-
(string) (Required) Comment author name.
-
(string) (Required) Comment author email.
- $url
-
(string) (Required) Comment author URL.
- $comment
-
(string) (Required) Content of the comment.
- $user_ip
-
(string) (Required) Comment author IP address.
- $user_agent
-
(string) (Required) Comment author User-Agent.
- $comment_type
-
(string) (Required) Comment type, either user-submitted comment, trackback, or pingback.
响应
(bool) If all checks pass, true, otherwise false.
源文件
文件: gc-includes/comment.php
function check_comment( $author, $email, $url, $comment, $user_ip, $user_agent, $comment_type ) {
global $gcdb;
// If manual moderation is enabled, skip all checks and return false.
if ( 1 == get_option( 'comment_moderation' ) ) {
return false;
}
/** This filter is documented in gc-includes/comment-template.php */
$comment = apply_filters( 'comment_text', $comment, null, array() );
// Check for the number of external links if a max allowed number is set.
$max_links = get_option( 'comment_max_links' );
if ( $max_links ) {
$num_links = preg_match_all( '/<a [^>]*href/i', $comment, $out );
/**
* Filters the number of links found in a comment.
*
* @since 3.0.0
* @since 4.7.0 Added the `$comment` parameter.
*
* @param int $num_links The number of links found.
* @param string $url Comment author's URL. Included in allowed links total.
* @param string $comment Content of the comment.
*/
$num_links = apply_filters( 'comment_max_links_url', $num_links, $url, $comment );
/*
* 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( "n", $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_previously_approved' ) ) {
if ( 'trackback' !== $comment_type && 'pingback' !== $comment_type && '' !== $author && '' !== $email ) {
$comment_user = get_user_by( 'email', gc_unslash( $email ) );
if ( ! empty( $comment_user->ID ) ) {
$ok_to_comment = $gcdb->get_var( $gcdb->prepare( "SELECT comment_approved FROM $gcdb->comments WHERE user_id = %d AND comment_approved = '1' LIMIT 1", $comment_user->ID ) );
} else {
// expected_slashed ($author, $email)
$ok_to_comment = $gcdb->get_var( $gcdb->prepare( "SELECT comment_approved FROM $gcdb->comments WHERE comment_author = %s AND comment_author_email = %s and comment_approved = '1' LIMIT 1", $author, $email ) );
}
if ( ( 1 == $ok_to_comment ) &&
( empty( $mod_keys ) || false === strpos( $email, $mod_keys ) ) ) {
return true;
} else {
return false;
}
} else {
return false;
}
}
return true;
}
$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!"; }