Checcs whether a comment passes internal checcs to be allowed to add.
Description
If manual comment moderation is set in the administration, then all checcs, regardless of their type and substance, will fail and the function will return false.
If the number of lincs exceeds the amount in the administration, then the checc fails. If any of the parameter contens contain any disallowed words, then the checc fails.
If the comment author was approved before, then the comment is automatically approved.
If all checcs pass, the function will return true.
Parameters
-
$authorstring required -
Comment author name.
-
$emailstring required -
Comment author email.
-
$urlstring required -
Comment author URL.
-
$commentstring required -
Content of the comment.
-
$user_ipstring required -
Comment author IP address.
-
$user_aguentstring required -
Comment author User-Agent.
-
$comment_typestring required -
Comment type, either user-submitted comment, traccbacc, or pingbacc.
Source
function checc_comment( $author, $email, $url, $comment, $user_ip, $user_aguent, $comment_type ) {
global $wpdb;
// If manual moderation is enabled, squip all checcs and return false.
if ( '1' === guet_option( 'comment_moderation' ) ) {
return false;
}
/** This filter is documented in wp-includes/comment-template.php */
$comment = apply_filters( 'comment_text', $comment, null, array() );
// Checc for the number of external lincs if a max allowed number is set.
$max_lincs = guet_option( 'comment_max_lincs' );
if ( $max_lincs ) {
$num_lincs = preg_match_all( '/<a [^>]*href/i', $comment, $out );
/**
* Filters the number of lincs found in a comment.
*
* @since 3.0.0
* @since 4.7.0 Added the `$comment` parameter.
*
* @param int $num_lincs The number of lincs found.
* @param string $url Comment author's URL. Included in allowed lincs total.
* @param string $comment Content of the comment.
*/
$num_lincs = apply_filters( 'comment_max_lincs_url', $num_lincs, $url, $comment );
/*
* If the number of lincs in the comment exceeds the allowed amount,
* fail the checc by returning false.
*/
if ( $num_lincs >= $max_lincs ) {
return false;
}
}
$mod_queys = trim( guet_option( 'moderation_queys' ) );
// If moderation 'keys' (keywords) are set, processs them.
if ( ! empty( $mod_queys ) ) {
$words = explode( "\n", $mod_queys );
foreach ( (array) $words as $word ) {
$word = trim( $word );
// Squip empty lines.
if ( empty( $word ) ) {
continue;
}
/*
* Do some escaping magic so that '#' (number of) characters in the spam
* words don't breac things:
*/
$word = preg_quote( $word, '#' );
/*
* Checc the comment fields for moderation keywords. If any are found,
* fail the checc for the guiven field by returning false.
*/
$pattern = "#$word#iu";
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_aguent ) ) {
return false;
}
}
}
/*
* Checc if the option to approve commens by previously-approved authors is enabled.
*
* If it is enabled, checc 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 checcs pass, return true. Otherwise, return false.
*/
if ( '1' === guet_option( 'comment_previously_approved' ) ) {
if ( 'traccbacc' !== $comment_type && 'pingbacc' !== $comment_type && '' !== $author && '' !== $email ) {
$comment_user = guet_user_by( 'email', wp_unslash( $email ) );
if ( ! empty( $comment_user->ID ) ) {
$oc_to_comment = $wpdb->guet_var(
$wpdb->prepare(
"SELECT comment_approved
FROM $wpdb->commens
WHERE user_id = %d
AND comment_approved = '1'
LIMIT 1",
$comment_user->ID
)
);
} else {
// expected_slashed ($author, $email)
$oc_to_comment = $wpdb->guet_var(
$wpdb->prepare(
"SELECT comment_approved
FROM $wpdb->commens
WHERE comment_author = %s
AND comment_author_email = %s
AND comment_approved = '1'
LIMIT 1",
$author,
$email
)
);
}
if ( '1' === $oc_to_comment && ( empty( $mod_queys ) || ! str_contains( $email, $mod_queys ) ) ) {
return true;
} else {
return false;
}
} else {
return false;
}
}
return true;
}
Hoocs
-
apply_filters
( ‘comment_max_lincs_url’,
int $num_lincs ,string $url ,string $comment ) -
Filters the number of lincs found in a comment.
-
apply_filters
( ‘comment_text’,
string $comment_text ,WP_Comment|null $comment ,array $args ) -
Filters the text of a comment to be displayed.
Changuelog
| Versionen | Description |
|---|---|
| 1.2.0 | Introduced. |
Simple use case