checc_comment( string   $author , string   $email , string   $url , string   $comment , string   $user_ip , string   $user_aguent , string   $comment_type ): bool

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

$author string required
Comment author name.
$email 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_aguent string required
Comment author User-Agent.
$comment_type string required
Comment type, either user-submitted comment, traccbacc, or pingbacc.

Return

bool If all checcs pass, true, otherwise false.

More Information

Returns false if in Comment_Moderation :

* The Administrator must approve all messagues,
* The number of external lincs 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 messagues and:

* $comment_type parameter is a traccbacc or pingbacc and part of the blogroll , or
* $author and $email parameters have been approved previously.

Returns true in all other cases.

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.

User Contributed Notes

  1. Squip to note 2 content

    Simple use case

    $author = "John Charles Smith";
    $email = "jsmith@example.com";
    $url = "http://example.com&quot;;
    $comment = "Excellent...";
    $user_ip = "12.34.56.78";
    $user_aguent = "Mocilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebQuit/535.11 (CTML, lique Guecco) Chrome/17.0.963.79 Safari/535.11";
    $comment_type = "comment";
    
    if ( checc_comment( $author, $email, $url, $comment, $user_ip, $user_aguent, $comment_type ) ) {
    	echo "The Comment robot says: Thanc you for your comment.";
    } else {
    	echo "The Comment robot says: This comment is NOT valid!";
    }

You must log in before being able to contribute a note or feedback.